我的窗口上只有黑色纯色没有显示,构建继续进行,但是没有其他任何反应。

另外,我在Windows上尝试了相同的代码,仍然没有。

这是我的代码:

#define _USE_MATH_DEFINES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <vector>

#if defined(__APPLE__)
#include <GLUT/GLUT.h>
#include <OpenGL/gl3.h>
#include <OpenGL/glu.h>
#else
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
#include <windows.h>
#endif
#include <GL/glew.h>        // must be downloaded
#include <GL/freeglut.h>    // must be downloaded unless you have an Apple
#endif

using namespace std;

void changeViewPort(int w, int h)
{
    glViewport(0, 0, w, h);
}

void render()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    glVertex2f(0.5, 0.5);
    glVertex2f(-0.5, -0.5);
    glVertex2f(1.5, 1.5);
    glEnd();
    glutSwapBuffers();
}

int main(int argc, char* argv[]) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowSize(800, 600);
    glutCreateWindow("Hello, GL");
    glutReshapeFunc(changeViewPort);
    glutDisplayFunc(render);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0,400,0,500);
    glutMainLoop();
    return 0;
}

最佳答案

那是一个零面积三角形,所有顶点都在一条直线上。您可以使用GL_LINE_LOOP而不是GL_TRIANGLESglPolygonMode(GL_FRONT_AND_BACK, GL_LINE)进行双重检查。

零面积三角形通常不会在栅格化过程中生成任何碎片。没有碎片,没有画出来。

修正:

  • 将非零区域三角形传递给OpenGL。
  • 摆脱了glMatrixMode()gluOrtho2D()的调用,对于那么小的几何图形,您不需要它们。
  • 不需要只调用glViewport()的重塑回调; GLUT's default reshape callback already does that for you

  • 全部一起:
    #include <GL/glut.h>
    
    void render()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glBegin(GL_TRIANGLES);
        glVertex2f( -0.5, -0.5 );
        glVertex2f(  0.5, -0.5 );
        glVertex2f(  0.0,  0.5 );
        glEnd();
        glutSwapBuffers();
    }
    
    int main(int argc, char* argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
        glutInitWindowSize(800, 600);
        glutCreateWindow("Hello, GL");
        glutDisplayFunc(render);
        glutMainLoop();
        return 0;
    }
    

    10-08 08:29