السلام عليكم ..
طبعا هذا مو درس .. بمعنى الكلمة .. انما تقدر تقول " خاطرة " .. -_-
اولا سأفرض أنك تعرف طريقة الاكساء في opengl .
وتعرف .. أساسيات devIL ..
راجع :
- http://204.157.36.16/index.php?showtopic=84349
لماذا نحتاج الى المكتبة DevIL .. ؟
حتى نستطيع تحميل اي صورة من اي نوع نريد ..
فلو لاحظت ,,
اننا في opengl .. نعتمد في الغالب على صورة BMP .. ولكنها غالبا ما تكون كبيرة الحجم ..
وسبب اعتمادنا عليه هو وجود دوال جاهزة لتحميلها ..
لو اردا تحميل انواع اخرى مثل JPG ,,tga .. فيجب ان نقرأ ذلك الملف من الصفر ..
شاهد احد مواضيع الاخ حسن :
- http://204.157.36.16/index.php?showtopic=81657
اذا فائدة هذه المكتبة هو التبسيط ..
اولا ::
لن نكتب الكود على " العمياني " ..
لازم نعرف وش المطلوب منا لتحميل الصورة الى اكساء .
openGL تطلب منا عدة معلومات .. لتستطيع ان تحول الصورة الى اكساء ..
هذه المعلومات هي :
طول الصورة وعرضها بالبكسل .
نوع الالوان بالصورة .. RGB - RGBA ونحو ذلك .
دقة الصورة ..
بيانات الصورة نفسها .
=
مكتبة DevIL تقدم لنا هذه المعلومات على طبق من ذهب ..
اولا ضع هذين السطرين :
ILuint text; ilGenImages(1, &text); ilBindImage(text);
في السطر الاول : اعلنا عن متغير من نوع ILuint هذا المتغير كأنه ID .. او معرف لهذه الصورة التي سنحملها . . .
السطر الثاني حجزنا لصورة .. مكان في الذاكرة ,, وعدد الصور واحدة .
السطر الثالث .. اخترنا هذا المعرف ID ... وذلك لاجراء العمليات عليه ..
الان سنحمل الصورة .
ilLoadImage("image.TGA");انتهينا من المهمة الاساسية ///
يوجد شيء بسيط .. الان .. وهو ان نحول الصورة الى RGB .. و UNSIGNED_BYTE
لتتوافق مع ما يطلبه opengl ,
ilConvertImage(IL_RGB , IL_UNSIGNED_BYTE);
انتهينا ..
بعد ان نحمل الاكساء في opengl .. نمرر المعلومات المطلوبة من الدالة glTexImage2D
هكذا /
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP) , ilGetInteger(IL_IMAGE_WIDTH) , ilGetInteger(IL_IMAGE_HEIGHT) , 0, ilGetInteger(IL_IMAGE_FORMAT) , GL_UNSIGNED_BYTE, ilGetData());
اعتقد واضحة جدا .. ولاتحتاج تعليق ...
الكود بشكله النهائي :
int LoadTexture(char *FileName ,GLuint *ID )
{
ilGenImages(1, &text);
ilBindImage(text);
ilLoadImage(FileName);
ilConvertImage(IL_RGB , IL_UNSIGNED_BYTE);
glGenTextures(1, ID);
glBindTexture(GL_TEXTURE_2D, *ID);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP) , ilGetInteger(IL_IMAGE_WIDTH) , ilGetInteger(IL_IMAGE_HEIGHT) , 0, ilGetInteger(IL_IMAGE_FORMAT) , GL_UNSIGNED_BYTE, ilGetData());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
return 1 }الان انت قادر على تحميل عشرات الانواع من الصور ,,
التطبيق في المرفقات . . .
" لا تنسى ان تثبت المكتبة DevIL "
