السلام عليكم .
أيضا .. كثيرا ما نسمع سؤال عن إنشاء صورة متحركة في OpenGL . .
هناك عدة طرق .. وبعدة دوال ’’
الجديد هنا استخدام الدالة glDrawPixels لعرض الصور .. وهذا أسهل ,
سبق أن وضع الاخ حسن الجودي درس مشابه باستخدام الSDL ,
نحن سنقوم بنفس الفكرة .. لكن باستخدام OpenGL .
أولا : سأفرض أنك قرأت هذا الدرس وفهمت كل شيء .
مثال : رسم صورة وتحريكها في OpenGL ( مع الشرح)
الهدف من المثال هو عرض صورة متحركة ..
أولا نحتاج لعدة صور .. تمثل الانيمشن .. طبعا يجب " أو ينصح بشدة " أن تكون بنفس الطول والعرض والنوع .. الخ .. حتى لاتدخل في مشاكل أخرى ,
طبعا الصور فرقتها .. يعني كل صورة في ملف ..
1.bmp
2.bmp
3.bmp
4.bmp
بالتالي .. في كل مدة معينة .. مثلا ثانية .. نقول لOpenGL .. قم برسم الصورة رقم واحد . . ثم رقم اثنين . وهكذا .
هنا عندنا أمرين مهمين :
- تحميل الصور :
أنا اريد تحميل 4 صور .. لذا أنشأت اربع structure لتحمل قيم أربع صور كما هو ظاهر أمامكم .
AUX_RGBImageRec **image;
/*******************************/
image = new AUX_RGBImageRec*[4];
image[0] = new AUX_RGBImageRec();
image[1] = new AUX_RGBImageRec();
image[2] = new AUX_RGBImageRec();
image[3] = new AUX_RGBImageRec();
image[0] = auxDIBImageLoad("1.bmp");
image[1] = auxDIBImageLoad("2.bmp");
image[2] = auxDIBImageLoad("3.bmp");
image[3] = auxDIBImageLoad("4.bmp");
/*******************************/- الانيمشن :
الان في كل ثانية نريد أن نرسم صورة معينة ..
لذا وضعت عداد سميته index يزداد في كل ثانية بمقدار واحد .. واذا كان أكبر من ثلاثة .. نرجع مرة اخرى للصورة رقم صفر .. ثم نرسم الصورة .. كما هو ظاهر أمامكم .
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glRasterPos2i( 100,100 );
glDrawPixels(image[index]->sizeX,image[index]->sizeY,GL_RGB,GL_UNSIGNED_BYTE,image[index]->data);
glutSwapBuffers();
}
void Timer(int val)
{
index+=1;
if(index >3)
index=0;
glutTimerFunc(1000,Timer,val);
glutPostRedisplay();
}اأي سؤال ,, اي استفسار .. أنا حاضر.
