معمولا ساده ترین راه لود تکسچر بر روی plane یا یک صفحه مربعی می باشد.

برای مثال تابع زیر را در نظر بگیرید :



GLuint LoadTexture()
{
GLuint texID;
AUX_RGBImageRec * image;

image = auxDIBImageLoad(L"crate.bmp");

glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image->sizeX, image->sizeY, GL_RGB, GL_UNSIGNED_BYTE, image->data);
return texID;
}




تابع فوق یک عکس رو لود می کنه و بر میگردونه ، حالا توی تابع آپدیت باید یک مربع یا مکعب رسم کنید و تکسچر رو روش بندازین ، در خط ابتدایی تابع زیر ، تکسچر را توسط تابع قبلی لود می کنیم و بعد از آن روی مدل می اندازیم : (مدل در کد زیر مکعب است )


void update()
{
tex = LoadTexture();
float theta = GetTickCount() / 10.0f;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(theta, 1, 1, 0);
glBindTexture(GL_TEXTURE_2D, tex);

glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_POLYGON);

glNormal3f(0, 0, 1);
glTexCoord2f(0, 0);
glVertex3f(-1, -1, 1.0f);

glNormal3f(0, 0, 1);
glTexCoord2f(1, 0);
glVertex3f(1, -1, 1.0f);

glNormal3f(0, 0, 1);
glTexCoord2f(1, 1);
glVertex3f(1, 1, 1.0f);

glNormal3f(0, 0, 1);
glTexCoord2f(0, 1);
glVertex3f(-1, 1, 1.0f);


glEnd();

glBegin(GL_POLYGON);

glNormal3f(0, 0, -1);
glTexCoord2f(0, 0);
glVertex3f(-1, -1, -1.0f);

glNormal3f(0, 0, -1);
glTexCoord2f(1, 0);
glVertex3f(1, -1, -1.0f);

glNormal3f(0, 0, -1);
glTexCoord2f(1, 1);
glVertex3f(1, 1, -1.0f);

glNormal3f(0, 0, -1);
glTexCoord2f(0, 1);
glVertex3f(-1, 1, -1.0f);

glEnd();

glBegin(GL_POLYGON);

glNormal3f(-1, 0, 0);
glTexCoord2f(0, 0);
glVertex3f(-1, -1, -1.0f);

glNormal3f(-1, 0, 0);
glTexCoord2f(1, 0);
glVertex3f(-1, -1, 1.0f);

glNormal3f(-1, 0, 0);
glTexCoord2f(1, 1);
glVertex3f(-1, 1, 1.0f);

glNormal3f(-1, 0, 0);
glTexCoord2f(0, 1);
glVertex3f(-1, 1, -1.0f);

glEnd();

glBegin(GL_POLYGON);

glNormal3f(1, 0, 0);
glTexCoord2f(0, 0);
glVertex3f(1, -1, -1.0f);

glNormal3f(1, 0, 0);
glTexCoord2f(1, 0);
glVertex3f(1, -1, 1.0f);

glNormal3f(1, 0, 0);
glTexCoord2f(1, 1);
glVertex3f(1, 1, 1.0f);

glNormal3f(1, 0, 0);
glTexCoord2f(0, 1);
glVertex3f(1, 1, -1.0f);

glEnd();

glBegin(GL_POLYGON);

glNormal3f(0, 1, 0);
glTexCoord2f(0, 0);
glVertex3f(-1, 1, 1.0f);

glNormal3f(0, 1, 0);
glTexCoord2f(1, 0);
glVertex3f(-1, 1, -1.0f);

glNormal3f(0, 1, 0);
glTexCoord2f(1, 1);
glVertex3f(1, 1, -1.0f);

glNormal3f(0, 1, 0);
glTexCoord2f(0, 1);
glVertex3f(1, 1, 1.0f);

glEnd();

glBegin(GL_POLYGON);
glNormal3f(0, -1, 0);
glTexCoord2f(0, 0);
glVertex3f(-1, -1, 1.0f);

glNormal3f(0, -1, 0);
glTexCoord2f(1, 0);
glVertex3f(-1, -1, -1.0f);

glNormal3f(0, -1, 0);
glTexCoord2f(1, 1);
glVertex3f(1, -1, -1.0f);

glNormal3f(0, -1, 0);
glTexCoord2f(0, 1);
glVertex3f(1, -1, 1.0f);
glEnd();

glutSwapBuffers();

}


تابع init هم برای تنظیم کردن نور و ماتریال به صورت زیر است :


void init(void)
{
glClearColor(1.0, 1.0, 1.0, 1.0);
GLfloat light_position[] = { 0.0f, 0.0f, 4.0f, 0.0f };
GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };

GLfloat material_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat material_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat material_shininess[] = { 15.0f };

glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);

glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);

glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, material_shininess);


glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);



glEnable(GL_TEXTURE_2D);






glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
}


و در آخر هم به صورت زیر تابع اصلی را می نویسیم :


int main(int argc, char** argv)
{

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
//glutMouseFunc(picking);
glutReshapeFunc(reshape);
glutDisplayFunc(update);
glutIdleFunc(update);
//glutKeyboardFunc(keyInput);

glutKeyboardFunc(keyInput);
//glutSpecialFunc(specialKeyInput);
glutMainLoop();
return 0;
}




توابع فوق با کتابخانه glut پیاده سازی شده اند.