بتـــــاريخ : 3/1/2011 3:45:15 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1740 0


    ربط OpenGL بالCpp عن طريق مكتبة SDL .

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : الشمري | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :

    السلام عليكم .

    كما نعرف يمكن استخدام Win32 API لهذا الغرض , ولكن يقولون أنها صعبة ولا تسمح بنقل اللعبة لتعمل على بيئة اللينوكس مثلا .
    وكما نعرف يمكن استخدام المكتبة GLUT لهذا الغرض ولكن يقولون انها سهلة جدا لدرجة انك تفقد السيطرة على برنامجك .. والLOOP فيها عبيط او يستعبط .
    قالوا لماذا لا نوجد البديل ..
    ظهرت بضع من المكتبات ( من 3 الى 9 مكتبات :) ) هي عبارة عن FrameWork ( اطار ) للOpenGL ..
    تسمح للمطورين بربط OpenGL بالنافذة .. باستقبال المدخلات من الكيبورد او الماوس ..الخ .
    من هذه المكتبات SDL .
    لماذا SDL ؟
    حقيقة لا اعرف الجواب .. لكن سأتكلم عما اشعر به .
    هي مكتبة اكثر صلابة .. اكثر انتشارا .. متطورة ,,
    هي كلمات عامة لكن هناك امور اكثر تفصيلا ومنها :
    - تمكنك من بناء العاب ثنائية الابعاد بدون استخدام OpenGL .
    - توفر عدد من المكتبات التيي تعد من ذهب .. مثل مكتبات الصور / الشبكات / الاصوات / الخطوط / وهي تأتي منفصلة عن المكتبة الام SDL .

    على العموم .. شاهد هذه الروابط ,
    مثال عمل animation في SDL

    TUTORIALS





    ما نريده الان هو ربط OpenGL بالنظام عن طريق ال SDL .

    الخطوات :

    1 - سأفرض أنك تملك المكتبة وقد قمت بتثبيتها عندك وقمت بعمل برامج تطبيقية عليها ..
    ( ما لي نفس أشرح شيء سهل وبسيط ) ,

    ولكن هناك أمور ممكن تحتاجها ,,

    اذا كنت تعمل على الفيجوال سي .. فتحتاج خطوات اضافية :
    1 - أنشئ مشروع جديد من نوع Console .

    2- Alt + F7

    4- انظر الصورتين وطبق ما تراه .

    Resized to 90% (was 721 x 281) - Click image to enlargeارفق صورة : monthly_07_2007/post-42837-1183303063.jpg


    ارفق صورة : monthly_07_2007/post-42837-1183303070.jpg

    الان ألصق هذا الكود .


    #include <windows.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <SDL/SDL.h>

    #   pragma comment (lib, "opengl32.lib")  /* link with Microsoft OpenGL lib */
    #   pragma comment (lib, "glu32.lib")    /* link with Microsoft OpenGL Utility lib */

    #   pragma comment (lib, "sdl.lib")
    #   pragma comment (lib, "sdlmain.lib")



    int main( int argc, char* argv[] )
    {
    SDL_Init(SDL_INIT_VIDEO);
    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);                //Use at least 5 bits of Red
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);      //Use at least 5 bits of Green
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);               //Use at least 5 bits of Blue
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);     //Use at least 16 bits for the depth buffer
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);    //Enable double buffering
    SDL_SetVideoMode(640, 480, 16, SDL_OPENGL );

           
    glViewport(0,0,640,480);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0f, 640, 480, 0.0f, -1.0f, 1.0f);
           
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glDisable(GL_DEPTH_BUFFER_BIT);

    SDL_Event event;
            while(1)
            {
                    if(SDL_PollEvent(&event))
                    {
                            switch (event.type)
                            {
                            case SDL_QUIT:
                                    SDL_Quit();
                                    exit(0); ////
                                    break;
                            }
                    }
                    // draw
                    glClear(GL_COLOR_BUFFER_BIT);
                    glLoadIdentity();
                    glTranslatef(0,0,0);
                    glRectf(0,0,100,100);
                    glVertex2f(100,100);
                    glEnd();
                    SDL_GL_SwapBuffers();
           
           

            }
      return 0;

    }



    الكود واضح ..

    طبعا تستدعي الملف sdl.h من المكان اللي انت وضعته فيه .
    انا قمت بانشاء مجلد اسمه sdl ولصقت فيه جميع ملفات sdl الرأسية .. ونسخت هذا المجلد ووضعته في مجلد include الموجود في مسار الفيجوال سي ,,

    و تستطيع تطبيق الكود على اكثر من مترجم فالامر بسيط ..( خاصة مترجم Visual cpp 6 تستطيع ترجمت الكود بنفس الطريقة التي شرحتها في الاعلى ) .



    اذا اردت المزيد من الخيارات مثل :
    المزيد عن الevent مثل :
    هل النافذة مفعلة .. هل تم تغيير ابعاد النافذة .. الخ .

    فانه بامكانك ذلك ..

    وايضا بامكانك تجعل النافذة full screen .

    وايضا بامكانك الاستفادة من خدمة تقدمها مكتبة SDL وهي تحميل صور BMP واستخراج الkey Color ,,
    بالتالي تستخدمه مع الاكساء في OpenGL .

    هذه المكتبة ممتازة و تقدم عدد كبير من الخيارات الاضافية ..

    لعلنا نناقشها في القسم العام لاحقا ( ان شاء الله ) .

    ملف مرفق  baseSDL_OpenGL.zip (6.31كيلو )

    كلمات مفتاحية  :

    تعليقات الزوار ()