我的OpenGL三角形没有显示

时间:2018-05-27 15:40:49

标签: c++ opengl glut

屏幕上不显示三角形。 我正在使用Dev c ++ 4.9.9.2(我知道你不喜欢它,但对我来说它仍然是最好的:)免费过剩。

以下是代码:

#include <GL/glut.h>


void display(){

     glClear ( GL_COLOR_BUFFER_BIT );
     glutSwapBuffers();


     glBegin ( GL_TRIANGLES );

          glColor3f ( 0.0, 1.0, 0.0);

          glVertex2f (-0.5,-0.5);
          glVertex2f (0.5,-0.5);
          glVertex2f (0.0, 0.5);

     glEnd();

 }

 void reshape ( int width, int height ){

     glViewport ( 0, 0, width, height );

 }

 void initOpenGL(){

     glClearColor ( 1.0, 0.1, 0.0, 1.0 );

 }

 int main (int argc, char **argv){

     glutInit ( &argc , argv );
     glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH );
     glutInitWindowSize ( 500, 500 );
     glutInitWindowPosition ( 100, 100 );
     glutCreateWindow ( "OpenGl" );

     initOpenGL();

     glutDisplayFunc ( display );
     glutIdleFunc ( display );
     glutReshapeFunc ( reshape );

     glutMainLoop ();

     return 0;

 }

1 个答案:

答案 0 :(得分:3)

让我们仔细看看您的display功能:

display()
{
    glClear();
    glutSwapBuffers();
    drawTriangle();
}

glClear()将后备缓冲区清除为恒定颜色。 glutSwapBuffers()交换前缓冲和后缓冲。这将显示屏幕上后备缓冲区的当前内容(这只是清晰的颜色)。新的后备缓冲区的内容将是未定义的。每个绘制调用都将绘制到后备缓冲区。

如您所见,该程序从未有机会在屏幕上显示除清晰颜色以外的其他内容。只需将glutSwapBuffers()移到函数末尾:

display()
{
    glClear();
    drawTriangle();
    glutSwapBuffers();
}

请选择一个更新的教程。您正在使用固定功能管道,该管道已被弃用了大约10年。您可以通过glBegin()glVertex3f()等来识别它。没有理由去学习死亡的东西(或者已经死在某些平台上)。