ورود

View Full Version : برنامه نویسی با openGL



smokyshadow
شنبه 07 فروردین 1395, 07:25 صبح
salam....torokhoda komak konid:( chejuri tu opengl aks load konam!rastesh bade koli searcho ina fahmidam khode openGl abzari baraye load aks nadare...va behtarin library in kar DevIL ast...ham noskheye linus va ham windows 65bitesho dl kardam va ham dar visual studio va ham dar eclipse add kardam...vali tu visual ke mizane not resolved...unam tu eclipseam asan nemidunam tuye linker ha che chizayi gharar migire ....va az koja mian?age kesi az DevIL estefade karde lotfan komak kone ...aya rah dige khobi baraye load texture soragh darid?

seyedVB
سه شنبه 10 فروردین 1395, 17:26 عصر
معمولا ساده ترین راه لود تکسچر بر روی 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 پیاده سازی شده اند.

smokyshadow
جمعه 13 فروردین 1395, 09:33 صبح
bebakhshid vali mizane undeclared indentifier man glut ro ham include kardam va azashash estefade kardam.baraye estefade az in tabe ha bayad ketabkhuneye dige ie ro ham include konam? :)s
139805

smokyshadow
جمعه 13 فروردین 1395, 09:40 صبح
salam....torokhoda komak konid:( chejuri tu opengl aks load konam!rastesh bade koli searcho ina fahmidam khode openGl abzari baraye load aks nadare...va behtarin library in kar DevIL ast...ham noskheye linus va ham windows 65bitesho dl kardam va ham dar visual studio va ham dar eclipse add kardam...vali tu visual ke mizane not resolved...unam tu eclipseam asan nemidunam tuye linker ha che chizayi gharar migire ....va az koja mian?age kesi az DevIL estefade karde lotfan komak kone ...aya rah dige khobi baraye load texture soragh darid?

yani hichki tahala ba opengl aks load nakarde?!:ناراحت::ناراحت::ناراحت :

GF_BJ_DF
چهارشنبه 12 مرداد 1401, 13:16 عصر
سلام
اگر تو از AuX استفاده می کنی
AUX فقط پسوند .bmp استفاده می کند