2010-12-02 35 views
1

Hy.I畫了一個天空盒和裏面的一些物體,除了我的物體因爲使用gluPerspective而變形,我需要繪製天空盒和東西(例如我有一個立方體,但是它看起來像paralelipipedic(長一個更長的盒子))。現在我已經閱讀紅皮書的第3章,但我無法弄清楚。我嘗試使用glfrustrum,glortho等,但我只是無法弄清楚如何做到這一點工作正常。這是我的代碼:愚蠢的問題。如何在使用gluPerspective時讓我的物體不變形?

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

有人可以幫我以任何方式?

+2

「變形」?截圖? – genpfault 2010-12-02 20:01:10

回答

1

嘗試通過45而不是100作爲gluPerspective的第一個元素。你可能會變形,因爲你的角度太寬(=不現實)。

如果這沒有幫助,請附上截圖。