Тупой вопрос. Как я могу сделать так, чтобы мои объекты не деформировались при использовании gluPerspective? - PullRequest
1 голос
/ 02 декабря 2010

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);   
}

Может кто-нибудь помочь мне чем-нибудь?

1 Ответ

1 голос
/ 02 декабря 2010

Попробуйте передать 45 вместо 100 в качестве первого элемента gluPerspective.Вы, вероятно, получаете деформации, потому что ваш угол слишком широк (= нереально).

Если это не помогает, приложите скриншот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...