为什么我的opengl程序不起作用?

时间:2009-12-27 14:18:48

标签: opengl

我正在编写一个程序,在XY平面上绘制一个正方形并使其旋转360度,但它无效。

void setupRC()  
{  
    glClearColor(0,0,1,1);  
    glColor3f(1,0,0);  
}  
void timerfunc(int value)  
{  
    glutPostRedisplay();  
    glutTimerFunc(33, timerfunc ,1);  
}    
void RenderScene()   
{  
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  
    static GLfloat rot = 0.0f,x =0.0f , y=10.0f , z=0.0f;  
    rot++;  
    x = 10 * cos(rot);  
    y = 10 * sin(rot);  
    glPushMatrix();
glRotatef(rot,0.0,1.0,0.0);
glBegin(GL_POLYGON);
    glVertex3i(10,-10,0);
    glVertex3i(10,10,0);
    glVertex3i(-10,10,0);
    glVertex3i(-10,-10,0);
    glVertex3i(10,-10,0);
    glEnd();  
    glPopMatrix();  
    glutSwapBuffers();  
}  
void ChangeSize(GLint w, GLint h)  
{  
    if(h==0)  
        h = 1;  
    GLfloat aspectratio = (GLfloat)w/(GLfloat)h;  

    glViewport(0,0,w,h);  
    glMatrixMode(GL_PROJECTION);  
    glLoadIdentity();  
    gluPerspective(60.0f, aspectratio, -1.0, 400.0);  
    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  

}  

int main(int argc , char **argv)  
{  
    glutInit(&argc, argv);  
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);  
    glutInitWindowSize(800,600);  
    glutInitWindowPosition(0,0);  
    glutCreateWindow("chelsea");  
    glutTimerFunc(33, timerfunc , 1);  
    setupRC();  
    glutDisplayFunc(RenderScene);  
    glutReshapeFunc(ChangeSize);  
    glutMainLoop();  

    return 0;  
}  

我没有输出,只是一个空白屏幕。

2 个答案:

答案 0 :(得分:2)

gluPerspective(60.0f,aspectratio,-1.0,400.0);

看起来不对,近剪裁平面需要是正数

答案 1 :(得分:1)

你应该真的使用glRotatef来进行旋转,因为你想要一个围绕XY旋转的平面(xy的代码是错误的{{1}你根本就什么都看不见了。

你应该使用rot命令给你的多边形颜色。

正如JB所说,你的glColor电话似乎也是错误的。请参阅this link以获取参考。