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

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

مغلق
بدأه Abdullah.Alshammeri في 1 يوليو 2007 · 1 رد · 3,087 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كما نعرف يمكن استخدام 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- انظر الصورتين وطبق ما تراه .

post-42837-1183303063_thumb.jpg

post-42837-1183303070_thumb.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

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

وجدت مثال مفيد

http://glprogramming.com/dgs.php?dg=6

مثال جيد جدا .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

هذا الموضوع مغلق.

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