【问题标题】:My OpenGL triangle doesen't show我的 OpenGL 三角形不显示
【发布时间】:2018-05-27 15:40:48
【问题描述】:

三角形没有出现在屏幕上。 我正在使用 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;

 }

【问题讨论】:

    标签: c++ opengl glut


    【解决方案1】:

    让我们仔细看看你的display 函数:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2012-06-09
      • 2018-07-26
      相关资源
      最近更新 更多