السلام عليكــم ورحمـة الله وبركاتــه ،،
كيف أستطيع إكساء مجسم بإستخدام glut و DivIL لأني بصراحة بحثت في المنتدى ولم أجد ما أريده
أريد فقط مثال بسيط: مكعب أو كرة أو إبريق شاء يتم إكسائه فقط
وشكرا
السلام عليكــم ورحمـة الله وبركاتــه ،،
كيف أستطيع إكساء مجسم بإستخدام glut و DivIL لأني بصراحة بحثت في المنتدى ولم أجد ما أريده
أريد فقط مثال بسيط: مكعب أو كرة أو إبريق شاء يتم إكسائه فقط
وشكرا
السلام عليكم
الاكساء او ال texture لايتم بأستخدام glut لان هذه المكتبه مخصصه لانشاء شاشه العرض .
الان سوف أريك مثال بسيط على الاكساء
GLuint YourTexture; glGenTextures(1,&YourTexture); // Obtain an unused texture object identifier
هكذا تبداء بعمل object للاكساء وهو YourTextureاو اي اسم تختاره
ثانياً :
تحدد نوع الاكساء 2D او 3D او .....
glBindTexture(GL_TEXTURE_2D,YourTexture);// create a texture object using
ثالثاً :
تحدد صوره الاكساء ونفترض انها موجوده على C drive
image = auxDIBImageLoad(L"c:\\1.bmp");//texturing image gluBuild2DMipmaps( GL_TEXTURE_2D, 3, image->sizeX, image->sizeY,GL_RGB, GL_UNSIGNED_BYTE, image->data );//use the image for texturing
رابعاً :
قبل بدايه الرسم نفعل الاكساء وكذالك نحدد الاكساء الذي نريده (اذا صنعت اكثر من واحد)
glEnable(GL_TEXTURE_2D);//to Enable the Texturing glBindTexture(GL_TEXTURE_2D,YourTexture);/*to enable the texture before the object you want.*/
الان اذا كان الجسم الذي تريد عمل texture له ذو وجوه مربعه فيمكن ان تعمل على تحديد ابعاد الاكساء اي ان الصوره بنفس حجم المربع او اكبر او اصغر .
void CALLBACK movie(){
glRotated(1,0,x++,0);
glRotated(1,0,0,x);
glRotated(1,x,0,0);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glBindTexture(GL_TEXTURE_2D,YourTexture);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(300,300, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(500,300, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(500,500, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(300,500, 0.0);
glTexCoord2f(0.0, 0.0); glVertex3f(300,300, 200);
glTexCoord2f(0.0, 1.0); glVertex3f(500,300, 200);
glTexCoord2f(1.0, 1.0); glVertex3f(500,500, 200);
glTexCoord2f(1.0, 0.0); glVertex3f(300,500, 200);
glTexCoord2f(0.0, 0.0); glVertex3f(300,500, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(500,500, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(500,500, 200);
glTexCoord2f(1.0, 0.0); glVertex3f(300,500, 200);
glTexCoord2f(0.0, 0.0); glVertex3f(300,300, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(500,300, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(500,300, 200);
glTexCoord2f(1.0, 0.0); glVertex3f(300,300, 200);
glEnd();
auxSwapBuffers();
}اما اذا كان كره او ابريق او غير ذالك
glBindTexture(GL_TEXTURE_2D,YourTexture); glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S); glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_T); auxSolidSphere(100);
الموضوع طويل ولكنه سهل واذا استطعت تعلم هذه الاكسائات فانك ستتكلم جميع الانواع بسهوله .
وشكراً.
تم تعديل هذه المشاركة بواسطة Ali Al-Zyoud في 1 سبتمبر 2009 في 23:02
أخي الفاضل :Ali Al-Zyoud شكر جزيلاَ علي الشرح الوافي لأني أواجه مشاكل مشابه,
ولكن عندي سؤال هل يكمن أستخدام صورة للأكساء بأمداد غير أمداد bmp?
حسب معرفتي فأنه عند التغليف يجب ان تكون الصوره bitmap ولكن هنالك العديد من المكتبات القادره على تحويل صيغ ال jpg مثلاً الى bitmap يمكن استخدامها
على العموم .. باستخدام DevIL , يمكن تحميل العديد من الانواع من الصور .. ويمكن بعدها تطبيق الاكساء كما وصحه الاخ علي .
اسف للتأخر في وضع مثال .. سأحاول وضع المثال في القريب العاجل .
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
شكرا على الردود
أنا أريد إستخدام المكتبة DivIL في تحميل الصور (jpg,tga,png,dds)
أنا أعلم اطريقة التقليدية في الـOpenGL لكنها تحمل فقط ملفات bmp
أرجو أن تفهموني
السلام عليكم ..
هذا مثال بسيط لتحميل صورة من نوع png باستخدام DevIL و glut .
طبعاً .. يجب تثبيت المكتبة لديك .. اذا كنت تعمل على Visual c++ 2008 . . سيعمل معك ان شاء الله , والا فانك بحاجة الى ربط المكتبات بطريقة سليمة .
# pragma comment (lib, "DevIL.lib")
# pragma comment (lib, "ILU.lib")
# pragma comment (lib, "ILUT.lib")
#include "windows.h"
#include <gl/glut.h>
#include <IL/il.h>
#include <IL/ilu.h>
#include <IL/ilut.h>
unsigned int textureID;
void initialzeDevil()
{
// call these functions to init DevIL
ilInit();
iluInit();
ilutRenderer(ILUT_OPENGL);
}
void createTexture()
{
unsigned int imageID;
// original point of any Image in OpenGL is left bottom .. so convert the original point to left bottom
ilEnable(IL_ORIGIN_SET);
ilSetInteger(IL_ORIGIN_MODE, IL_ORIGIN_LOWER_LEFT);
ilGenImages ( 1 ,&imageID );
ilBindImage (imageID );
ilLoadImage("image.png");
// Convert the Image to be compatible with OpenGL Texture Format
ilConvertImage(IL_RGBA,IL_UNSIGNED_BYTE);
// Get image Info that will be used to create openGL texture .
int width = ilGetInteger(IL_IMAGE_WIDTH);
int height = ilGetInteger(IL_IMAGE_HEIGHT);
glGenTextures(1,&textureID);
glBindTexture(GL_TEXTURE_2D,textureID);
gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width,height,ilGetInteger(IL_IMAGE_FORMAT),ilGetInteger(IL_IMAGE_TYPE),ilGetData());
glEnable(GL_TEXTURE_2D);
// Now .. there is no need to keep image data.
ilDeleteImage(imageID);
}
void reshape(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-w/2.0f,w/2.0f,-h/2.0f,h/2.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void display()
{
glClearColor(0.2,0.2,0.2,1);
glClear(GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D,textureID);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(-200,-200); // left bottom
glTexCoord2f(1,0);
glVertex2f(200,-200); // right bottom
glTexCoord2f(1,1);
glVertex2f(200,200); // right top
glTexCoord2f(0,1);
glVertex2f(-200,200); // left top
glEnd();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
// GLUT Window Initialization:
glutInit (&argc, argv);
glutInitWindowSize (600,400);
glutInitDisplayMode ( GLUT_RGBA | GLUT_DOUBLE );
glutCreateWindow ("DevIL with GLUT Example");
initialzeDevil();
createTexture();
glutDisplayFunc (display);
glutReshapeFunc (reshape);
glutMainLoop ();
return 0;
}تم تعديل هذه المشاركة بواسطة الشمري في 3 سبتمبر 2009 في 07:40
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
شكرا جزيلا أخ الشمري هذا هو الذي أريده
تم تعديل هذه المشاركة بواسطة crazy Programm2007er في 3 سبتمبر 2009 في 16:36
جزاك الله خيراً أخي:- الشمري علي هذا الشرح الرائع.