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

OPENGL و DevIL .. الربط بينهما ..

مغلق
بدأه Abdullah.Alshammeri في 2 مارس 2006 · 0 رد · 1,669 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1

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

طبعا هذا مو درس .. بمعنى الكلمة .. انما تقدر تقول " خاطرة " .. -_-

اولا سأفرض أنك تعرف طريقة الاكساء في opengl .

وتعرف .. أساسيات devIL ..

راجع :

- http://204.157.36.16/index.php?showtopic=84349

- /index.php?showtopic=80112

لماذا نحتاج الى المكتبة 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 "

devil.zip

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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

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