الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طلب مساعده بخصوص Opengl

بدأه ansam2010 في 27 ديسمبر 2009 · 7 رد · 1,174 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي سؤال لو سمحتم

طلب مني عمل مشروع بواسطة OpenGL وبمساعدة لغة البرمجة C++

وانا لم اتعامل مع هذا البرنامج من قبل

انا فهمت ان هناك برنامج خاص يسمى OpenGL ولما دخلت النت لأبحث عن البرنامج وجدت برامج كثيره تسمى OpenGL

وبالبحث وجدت موقعكم المميز جدا يلي ان شاء الله رح استفيد منو كتير

ولما قرأت بعض المواضيع والدروس فهمت ان الــ OpenGL عبارة عن مكتبه متوفره ببرامج اللغات البرمجيه من بينها C++

هل يلي انا فهمتو صحيح؟ ام لا؟

ان كان صحيح ... هل يكفي ان يكون عندي برنامج السي لحتى اقدر ابدأ بعمل المشروع؟

بنتظر ردودكم لو سمحتم

تحياتي

#2

بسم الله الرحمن الرحيم

هاي مرحبا,

لم تخطئ في شيء. إليك شرحا مفصلا.

إن مكتبة الأوبن جي أل opengl هي مكتبة و ليس برنامج , هذه المكتبة صممت أصلا من الأساس لتدعم جميع اللغات و جميع أنظمة التشغيل الداعمة لها .

هذه المكتبة تسمح لك بعمل مشاريع ( كالألعاب مثلا فهي الرئدة في ذلك و التطبيقات الرسومية) .

الأن ننتقل إلى عمل المشاريع:

1 بإمكانك الإعتماد على مكتبة نظام التشغيل الذي تعمل عليه مثلا:

- في وين داوز نستعمل مكتبة windows ( عموما يدعى مجاله بال win 32 API ) (إستعن بكتاب NEHE المترجم ).

- في لونيكس نستعمل مكتبة X (عموما تدعى ب Linux XLib ) (لدي نسجة من كتاب Linux Games Programming إن أردته أحمله لك ).

نستعمل إحدى هاته المكتبتان لربط مكتبة الأوبن جي أل opengl مع نظام التشغيل الخاص بالمكتبة.

2 إستعمال مكتبات غير مكتبات النظام مثل glut و freeglut و QT و و و إلخ لربط مكتبة الأوبن جي أل مع النظام.

GLUT هنا كتاب

3 إختيار لغة برمجة مناسبة ( السي و سي بلس بلس أفضل ).

4 في أشياء متقدمة نحتاج لمساعدة بطاقة الرسوميات .

هذا كل شيء أي , فمكتبة الأوبن جي أل لا تكفي لوحدها.

أتمنى لك التوفيق.. :blink:

تم تعديل هذه المشاركة بواسطة 3ds max2010 في 27 ديسمبر 2009 في 23:54

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg
#3

شكرا كتير الك اخي 3ds max2010 على ردك وافادتك

يعني افهم من هالكلام

ان الان اقدر انزل برنامج السي بلس بلس واباشر العمل فورا

ام احتاج لأي اضافات عالبرنامج؟

#4

هذا مثال عن مشروع بمحرر codeBlock

كتبته من أيام قليلة لكثرة الطلب.

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg
#5

بجد شكرا كتير

وهالموضوع أفدني كتير بمشروعي

بس عندي استفسار تاني

لو فرضا بدي اعمل لعبه

ومن خلال البرمجه بدي اختار ان مثلا السهم اليمين بمشي لليمين والسهم اليسار بمشي لليسار

والسهم يلي اعلى واللي تحت بمشو للامام وللخلف

ممكن تعطيني الاختصارات للاتجاهات الاربعه؟

دورت عالنت ومش عم لاقيهم

طبعا للاوبن جي ال

ومشكورين

#6

بسم الله الرحمن الرجيم

مرحبا,

نعم هذا ممكن, و كل شيء ممكن في عالم الأوبن جي أل إن شاء الله

في الحقيقة هذا هو الكود المستعمل في ذلك, و يتطلب فقط الحفظ

void inputKey(int key, int x, int y) {

	switch (key) {
		case GLUT_KEY_LEFT :
             j = j - 0.1 ;
             if( j < -2. )  j = -2.;
             glutPostRedisplay();
             break;
		case GLUT_KEY_RIGHT :
             j = j + 0.1 ;
             if( j > 2. )  j = 2.;
             glutPostRedisplay();
             break;
		case GLUT_KEY_DOWN :
             k = k + 0.1 ;
             if( k > 1. )  k = 1.;
             glutPostRedisplay();
			 break;
		case GLUT_KEY_UP :
			  k = k - 0.1 ;
             if( k < - 3. )  k = -3.;
             glutPostRedisplay();
             break;
	}
}

ثم نستدعي الدالة inputKey كبراميتر في الدالة glutSpecialFunc

glutSpecialFunc(inputKey);

الشيفرة الإجمالية:

#include<windows.h>
#include <GL/glut.h>

static int object ;
static float i=1, j=0, k=0 ;

void init(void)
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);
}

void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             /* إفراغ المصفوفة*/
           /* تحويلات الرؤية  */
   gluLookAt (j*1., 0.0, k*1+5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
   glTranslatef(0.,0.,0.);
   glScalef (i*1.0, i*2.0, i*1.0);
if(object == 1)
{
        glPushMatrix();
        glColor3f(1., 0., 0.);
        glBegin(GL_TRIANGLES);
                glVertex3f(1.,1.,0.);
                glVertex3f(1.,-1.,0.);
                glVertex3f(-1.,-1.,0.);
        glEnd();
        glPopMatrix();
}
else if( object == 2 )
{
        glPushMatrix();
        glColor3f(0., 1., 0.);
        glBegin(GL_QUADS);
                glVertex3f(1.,1.,0.);
                glVertex3f(1.,-1.,0.);
                glVertex3f(-1.,-1.,0.);
                glVertex3f(-1.,1.,0.);
        glEnd();
        glPopMatrix();
}
   glutSwapBuffers();
}

void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
   glMatrixMode (GL_MODELVIEW);
}

/* ARGSUSED1 */
void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
          case 't' :
             object = 1;
             glutPostRedisplay();
             break;
          case 'q' :
             object = 2;
             glutPostRedisplay();
             break;
          case 'r' :
             j = j + 0.1;
             if(  j > 2. )  j = 2.;
             glutPostRedisplay();
             break;
          case 'l' :
             j = j - 0.2 ;
             if( j < -2. )  j = -2.;
             glutPostRedisplay();
             break;
          case 43 :
                 i = i + 0.1;
                 if( i > 1.6) i=1.6;
                 glutPostRedisplay();
                 break;
          case 45 :
                 i = i - 0.2;
                 if( i < 0.2) i=0.2;
                 glutPostRedisplay();
                 break;

      case 27 :
         exit(0);
         break;
   }
}

void inputKey(int key, int x, int y) {

	switch (key) {
		case GLUT_KEY_LEFT :
             j = j - 0.1 ;
             if( j < -2. )  j = -2.;
             glutPostRedisplay();
             break;
		case GLUT_KEY_RIGHT :
             j = j + 0.1 ;
             if( j > 2. )  j = 2.;
             glutPostRedisplay();
             break;
		case GLUT_KEY_DOWN :
             k = k + 0.1 ;
             if( k > 1. )  k = 1.;
             glutPostRedisplay();
			 break;
		case GLUT_KEY_UP :
			  k = k - 0.1 ;
             if( k < - 3. )  k = -3.;
             glutPostRedisplay();
             break;
	}
}


int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
   glutGameModeString( "640x480:16@60" );
    // الإنتقال إلى نمط لعبة
   glutEnterGameMode();
   init ();
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutSpecialFunc(inputKey);
   glutMainLoop();
   return 0;
}

نضغط على المفاح t لعرض مثلث و على q لعرض مربع و + أو - للتحجيم و الأسهم لتحريك المجسم.

عموما أنا إستعنت بالدالة gluLooAt .

يعني أنه بإمكانك الإستعانة بالتالي:

void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             /* إفراغ المصفوفة*/
           /* تحويلات الرؤية  */
   gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
   glTranslatef(j*1.,0.,k*1);
   glScalef (i*1.0, i*2.0, i*1.0);
if(object == 1)
{
        glPushMatrix();
        glColor3f(1., 0., 0.);
        glBegin(GL_TRIANGLES);
                glVertex3f(1.,1.,0.);
                glVertex3f(1.,-1.,0.);
                glVertex3f(-1.,-1.,0.);
        glEnd();

أعتقد أن كل شيء واضح كالشمس.

أتمنى أنك إستفدت.

تم تعديل هذه المشاركة بواسطة 3ds max2010 في 30 ديسمبر 2009 في 00:48

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg
#7

Left & Right تمام

ولكن Up & Down معم يشتغلو

#8

الشيفرة شعالة مائة بالمائة, لا أعرف ما مشكلتك بالضبط, لكن حاول و إن شاء الله ستنجح.

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg

مواضيع مشابهة