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

مشكلة فى الاكساء بالصور فى OpenGL

بدأه sookkaa في 23 سبتمبر 2010 · 2 رد · 813 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله وبركاته

المشكله ان انا عامل برنامج المشكله فيه ان الاكساء بالصور بيشتغل بس على امتداد الصور bmp. لما احط صوره امتدادها jpg. مش بيشتغل مش عارف ليه

انا مرفق نسخه من البرنامج ياريت حد يحمله ويشوف المشكله دى من ايه

Texture.rar

#2

لأن بنية JPG مختلفة تماماً عن BMP ،يبدو Class الذي تستخدمه لا يدعم JPG.

كل نوع من الصور له طريقة خاصة في القراءة ، ستحتاج لحولي 100 إلى 100,000 سطر لتقرأ تلك الأنواع باختلافها . أغلب الألعاب تعتمد على صور BMP و TGA بدون مشاكل .. لكن إن كنت مصراً على دعم JPG ، فهناك حلين :

- أن تسأل في قسم VB.net عن الطريقة ، وتبحث في .net framework . انظر لهذا الموضوع مثلاً :

http://www.gamedev.net/community/forums/topic.asp?topic_id=552815&whichpage=1

- أو أن تستخدم المكتبة DevIL ( وتسمى أحياناً OpenIL ) ، المرفقة مع المكتبة Tao ، هذه تدعم عشرات الأنواع من الصور .

في كلا الحالتين ، OpenGL لا تعرف أصلاً أنك تستخدم صورة من نوع JPG أو حتى XYZ ، فهي تطلب من 4 أمور :

- طول الصورة .

- عرض الصورة .

- طريقة ترتيب الألوان RGB أو BGR .. الخ .

- بيانات الصورة نفسها data .

الطريقتين السابقتين تقومان بهذا ، وهذا مثال بسيط على DevIL ، بلغة سي ، قد تتمكن من تحويله إلى VB بنفسك ( لا أملك Tao الآن ) :

أولاً : تهيء DevIL ، وتضع هذا الكود في بداية برنامجك ( بعد أن تضيف المرجع reference الخاص بالمكتبة DevIL ) :

	ilInit()
	iluInit()
	ilutRenderer(ILUT_WIN32)

وبعدها في كود الاكساء :

Dim text as Integer
Dim FileName as String = "image.jpg"

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());

هذا مجرد كود عام ، تحتاج لتحويله إلى VB.net بعد أن تقرأ التعليمات المرفقة مع المكتبة Tao وتحديداً DevIL.net .. ستجد أسماء الدوال بالتفصيل وقد تجد مثال واضح .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

انظر إلى المجلد

/source/examples/DevILExamples

الموجود مع المكتبة Tao .. ستجد مثال واضح .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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