2012-11-13 115 views
0

在此代码中,我尝试绘制立方体。我尝试绘制所有面逆时针顶点。
问题是,如果我不旋转立方体只绘制红色的脸部,如果我旋转它的5度,我只看到立方体的一部分。绘制一个立方体并旋转它:立方体的一部分消失

#import <OpenGL/OpenGL.h> 
#import <GLUT/GLUT.h> 

int width=500, height=500, depth=500; 

void init() 
{ 
    glEnable(GL_DEPTH_TEST); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(200, 200,-200, 200, 200, 0, 0, 1, 0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0,width,0,height); 
    gluPerspective(90, 1, -100, 100); 
    glViewport(0, 0, width, height); 
} 

void drawCube() 
{ 
    int vertices[8][3]= { {100,100,0} , {300,100,0}, {300,300,0}, {100,300,0}, {100,100,300} , {300,100,300}, {300,300,300}, {100,300,300} }; 
    glBegin(GL_QUADS); 

    glColor4f(1, 0, 0, 0); 
    glVertex3iv(vertices[0]); 
    glVertex3iv(vertices[1]); 
    glVertex3iv(vertices[2]); 
    glVertex3iv(vertices[3]); 

    glVertex3iv(vertices[4]); 
    glVertex3iv(vertices[5]); 
    glVertex3iv(vertices[6]); 
    glVertex3iv(vertices[7]); 

    glColor4f(0, 1, 0, 0); 
    glVertex3iv(vertices[1]); 
    glVertex3iv(vertices[5]); 
    glVertex3iv(vertices[6]); 
    glVertex3iv(vertices[4]); 

    glVertex3iv(vertices[0]); 
    glVertex3iv(vertices[4]); 
    glVertex3iv(vertices[7]); 
    glVertex3iv(vertices[3]); 

    glColor4f(0, 0, 1, 0); 
    glVertex3iv(vertices[3]); 
    glVertex3iv(vertices[2]); 
    glVertex3iv(vertices[6]); 
    glVertex3iv(vertices[7]); 

    glVertex3iv(vertices[0]); 
    glVertex3iv(vertices[1]); 
    glVertex3iv(vertices[5]); 
    glVertex3iv(vertices[4]); 

    glEnd(); 
} 


void display() 
{ 
    glClearColor(0.0, 0.0, 0.0, 0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(200,200,150); 
    glRotatef(5, 0, 1, 0); 
    glTranslatef(-200,-200,-150); 
    drawCube(); 
    glutSwapBuffers(); 
} 

void idle(void) 
{ 
} 

int main(int argc, char * argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowPosition(100, 100); 
    glutInitWindowSize(width, height); 
    glutCreateWindow("Test"); 
    glutDisplayFunc(display); 
    glutIdleFunc(idle); 
    init(); 
    glutMainLoop(); 
    return 0; 
} 

这是我所看到的:

Window

不过我应该会看到一个旋转立方,所以我应该看到在right.My怀疑另一面的部分是我以逆时针顺序绘制顶点或其他东西时会出错。

PS:代码已过时,因为在我的大学我没有可能学习最新版本的OpenGL,我必须使用GLUT。

回答

1

夫妇的问题:

  1. 你的投影矩阵设置不无意义。

    首先,您应该决定是否需要拼字或透视投影。

    如果您要拼写,请使用gluOrtho2d。如果您想要透视投影,请使用gluPerspective。使用两者都会产生一种奇怪的转变,这当然不是你想要的。

  2. gluPerspective不能有一个负面的近机。近平面应该大于零,也许像1这样的小平面,其中远平面定义了距离相机要离背剪平面多远的距离。既然你似乎在使用数百个单位,我可能会推荐一个1000左右的背板。

  3. 您正在调用gluLookAt,但通过在display()中调用glLoadIdentity来擦除视图矩阵。如果你想要一个视图矩阵,在编程之后不要擦除它。

+0

一切都好,除了我现在只能用正投影而不是预测投影。 gluPerspective的值我试图是45,1,1,1000,我没有看到窗口中的立方体。 –