C++ OpenGL/Glut 无法绘制

Posted

技术标签:

【中文标题】C++ OpenGL/Glut 无法绘制【英文标题】:C++ OpenGl/Glut failing to draw 【发布时间】:2012-10-27 15:15:21 【问题描述】:

我正在尝试在窗口中简单地绘制一个三角形。我之前在之前的代码中绘制过形状,并查找了常见问题,例如无法刷新或未清除颜色缓冲区。

无论我似乎尝试什么,我都无法在屏幕上绘制任何东西,即使我已经简化了我的代码以基本上看起来与我之前的(工作!)代码完全一样。我只有一个 main 和一个渲染:

// Declarations //
void Render(void); //Call the drawing functions

int main(int argc, char *argv[])

    glutInit(&argc,argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(20,20);
    glutCreateWindow("Triangle Test");

    //prepare for drawing
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);

    //now draw
    glutDisplayFunc(Render);

    glutMainLoop();



// ---- Render Function ----
void Render(void)


    // Draw a triangle
    glColor3f(1.0f, 1.0f, 1.0f);

    glBegin(GL_LINE_STRIP);

    glVertex2f(100.0f, 20.0f);
    glVertex2f(0.0f, 20.0f);
    glVertex2f(20.0f, 50.0f);

    glEnd();
    glFlush();

在运行时,它使用我设置的背景颜色(在本例中为黑色)绘制一个窗口,没有其他内容。我完全被难住了。堆栈上的所有其他问题似乎都由我在这里的东西(即 glFlush)解决了,它与我的旧代码几乎相同,画得很好。有什么想法吗?

【问题讨论】:

设置投影?在 Z 剪切边界内移动顶点? 在窗口放置在屏幕上之后,在绘制之前清除帧缓冲区,而不是在窗口出现之前清除? 【参考方案1】:

您正在绘制一个比窗口大的线条。您需要设置矩阵以便看到更大的区域、绘制更小的多边形,或者通过绘制三角形而不是线条来绘制填充多边形。

【讨论】:

是的,回到页面,因为我刚刚想通了。经典的烂片。谢谢

以上是关于C++ OpenGL/Glut 无法绘制的主要内容,如果未能解决你的问题,请参考以下文章

如何纹理 Opengl glut 对象(C++)

OpenGL/GLUT:glTranslatef 和 glRotatef 在绘制立方体之前还是之后?

在 Opengl Glut 中绘制对象数组

用鼠标在 OpenGL GLUT 中绘制多边形

OpenGL/Glut glutSolidCube()

Opengl/Glut 键盘输入问题