Visual c++ 愚蠢的问题。如何在使用透视时使我的对象不变形?

Visual c++ 愚蠢的问题。如何在使用透视时使我的对象不变形?,visual-c++,opengl,Visual C++,Opengl,Hy.我画了一个天空盒和里面的一些物体,除了我的物体被透视法变形,我需要画天空盒和其他东西(例如,我有一个立方体,但它看起来像平行平行的(长一个更长的盒子)).现在我已经读了红皮书的第三章,但我想不出来.我试过使用glfrustrum,glortho等,但我想不出如何使这项工作正常。这是我的代码: void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity (); /*

Hy.我画了一个天空盒和里面的一些物体,除了我的物体被透视法变形,我需要画天空盒和其他东西(例如,我有一个立方体,但它看起来像平行平行的(长一个更长的盒子)).现在我已经读了红皮书的第三章,但我想不出来.我试过使用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);   
}

有人能帮我什么忙吗?

试着把
45
而不是
100
作为
透视图的第一个元素。你可能会变形,因为你的角度太宽(=不切实际)


如果没有帮助,请附上屏幕截图。

尝试将
45
而不是
100
作为
透视图的第一个元素传递。你可能会变形,因为你的角度太宽(=不切实际)

如果没有帮助,请附上一张截图