Hy.Я нарисовал скайбокс и несколько объектов внутри него, все в порядке, за исключением того, что мои объекты деформированы с помощью gluPerspective, который мне нужен, чтобы нарисовать скайбокс и прочее (например, у меня есть куб, но это выглядит как параллипипедический (длинная длинная коробка)). Теперь я прочитал 3-ю главу книги, но не могу понять. Я пытался использовать glfrustrum, glortho и т. д., но я просто не могу понять, как сделать эта работа нормальная. это мой код:
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();
/*
Set projection matrix for 100 degree FOV
*/
GLfloat w = (GLfloat)glutGet(GLUT_WINDOW_WIDTH),h = (GLfloat)glutGet(GLUT_WINDOW_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(100,w/h,0.5,100);
/*
Set modelview matrix for camera
*/
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(cameraPhi,1,0,0);
glRotatef(cameraTheta,0,1,0);
/*
No need to clear the color buffer, the skybox fills the whole screen
Shiny objects in cube environment mode use depth buffer, so we do need to clear that one
*/
glClear(GL_DEPTH_BUFFER_BIT);
/*
Draw skybox
*/
glDisable(GL_LIGHTING);
//the way i move around space(my camera)
gluLookAt(move_camera.x,move_camera.y,move_camera.z,move_camera.x,move_camera.y,move_camera.z-100,0,1,0);
drawSkybox2d(treeTexture);
glEnable(GL_LIGHTING);
//theese are my objects
chair(obiecte[0]);
table(obiecte[1]);
bed(obiecte[2]);
Sleep(5);
glutSwapBuffers();
}
и скайбокс, я рисую его так:
void drawSkybox2d(Texture treeTexture[])
{
/*
Enable 2d texture mapping
*/
glEnable(GL_TEXTURE_2D);
/*
Disable the depth buffer when rendering the skybox
*/
glDisable(GL_DEPTH_TEST);
glDepthMask(0);
int dim=20,x=1,y=0;
/*
Rear Face
*/
glBindTexture(GL_TEXTURE_2D,treeTexture[5].texID);
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(x,y);
glVertex3f(dim,dim,dim);
glTexCoord2f(x,x);
glVertex3f(dim,-dim,dim);
glTexCoord2f(y,x);
glVertex3f(-dim,-dim,dim);
glTexCoord2f(y,y);
glVertex3f(-dim,dim,dim);
glEnd();
/*
Front Face
*/
glBindTexture(GL_TEXTURE_2D,treeTexture[4].texID);
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(x,y);
glVertex3f(-dim,dim,-dim);
glTexCoord2f(x,x);
glVertex3f(-dim,-dim,-dim);
glTexCoord2f(y,x);
glVertex3f(dim,-dim,-dim);
glTexCoord2f(y,y);
glVertex3f(dim,dim,-dim);
glEnd();
/*
Right Face
*/
glBindTexture(GL_TEXTURE_2D,treeTexture[1].texID);
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(x,y);
glVertex3f(dim,dim,-dim);
glTexCoord2f(x,x);
glVertex3f(dim,-dim,-dim);
glTexCoord2f(y,x);
glVertex3f(dim,-dim,dim);
glTexCoord2f(y,y);
glVertex3f(dim,dim,dim);
glEnd();
/*
Left Face
*/
glBindTexture(GL_TEXTURE_2D,treeTexture[0].texID);
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(x,y);
glVertex3f(-dim,dim,dim);
glTexCoord2f(x,x);
glVertex3f(-dim,-dim,dim);
glTexCoord2f(y,x);
glVertex3f(-dim,-dim,-dim);
glTexCoord2f(y,y);
glVertex3f(-dim,dim,-dim);
glEnd();
/*
Top Face
*/
glBindTexture(GL_TEXTURE_2D,treeTexture[3].texID);
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(y,x);
glVertex3f(-dim,dim,dim);
glTexCoord2f(y,y);
glVertex3f(-dim,dim,-dim);
glTexCoord2f(x,y);
glVertex3f(dim,dim,-dim);
glTexCoord2f(x,x);
glVertex3f(dim,dim,dim);
glEnd();
/*
Bottom Face
*/
glBindTexture(GL_TEXTURE_2D,treeTexture[2].texID);
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(y,x);
glVertex3f(-dim,-dim,-dim);
glTexCoord2f(y,y);
glVertex3f(-dim,-dim,dim);
glTexCoord2f(x,y);
glVertex3f(dim,-dim,dim);
glTexCoord2f(x,x);
glVertex3f(dim,-dim,-dim);
glEnd();
/*
Reactive depth buffer
*/
glEnable(GL_DEPTH_TEST);
glDepthMask(1);
}
Может кто-нибудь помочь мне чем-нибудь?