السلام عليكم . كما نعرف يمكن استخدام 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- انظر الصورتين وطبق ما تراه .
#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 RedSDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); //Use at least 5 bits of GreenSDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); //Use at least 5 bits of BlueSDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); //Use at least 16 bits for the depth bufferSDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); //Enable double bufferingSDL_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;}