السلام عليكم و رحمة الله وبركاته
المشكله ان انا عامل برنامج المشكله فيه ان الاكساء بالصور بيشتغل بس على امتداد الصور bmp. لما احط صوره امتدادها jpg. مش بيشتغل مش عارف ليه
انا مرفق نسخه من البرنامج ياريت حد يحمله ويشوف المشكله دى من ايه
السلام عليكم و رحمة الله وبركاته
المشكله ان انا عامل برنامج المشكله فيه ان الاكساء بالصور بيشتغل بس على امتداد الصور bmp. لما احط صوره امتدادها jpg. مش بيشتغل مش عارف ليه
انا مرفق نسخه من البرنامج ياريت حد يحمله ويشوف المشكله دى من ايه
لأن بنية 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 .. ستجد أسماء الدوال بالتفصيل وقد تجد مثال واضح .
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
انظر إلى المجلد
/source/examples/DevILExamples
الموجود مع المكتبة Tao .. ستجد مثال واضح .
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri