【问题标题】:OpenGL program shows only what is behind the screenOpenGL 程序只显示屏幕后面的内容
【发布时间】:2014-12-24 18:49:46
【问题描述】:

当我运行 OpenGL 程序时,如果当前打开了文本编辑器,opengl 程序会在其屏幕上显示该部分。或者一个网页浏览器是打开的,opengl 程序显示了浏览器的那部分。这是我的主要功能:

int main(int argc, char** argv)
{
    glutInit(&argc, argv);  
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); 
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("OpenGL Program");

    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
} 

我的显示功能:

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 
    glLoadIdentity();

    gluLookAt(posz,posy,posz, 0, 0, 0, upx, upy, upz);
        glBegin(GL_TRIANGLES);
      glVertex3f(-1.0f,-0.25f,0.0f);
      glVertex3f(-0.5f,-0.25f,0.0f);
      glVertex3f(-0.75f,0.25f,0.0f);

    glEnd();
}

它不会给出任何错误或警告,它只是显示屏幕上已有的内容。我错过了什么?谢谢。

【问题讨论】:

  • 检查您的某些初始化是否报告了错误(例如某些不支持的显示格式等),这是我出现此类行为的最常见原因。
  • 与几天前的stackoverflow.com/questions/27577474/… 相同的问题。
  • @RetoKoradi 我搜索了问题,但找不到解决方案。该问题的标题不是很容易解释。
  • 当然,我很惊讶这个问题并没有仅仅因为它的标题而被否决。关于“为什么......不工作”的问题,代码和没有解释是不受欢迎的,但像这样无用的标题应该更是如此。
  • 是的,对于这些类型的问题,在您知道答案之前很难识别重复项。不过,它很常见。我在我的个人网站上有一篇文章,其中涵盖了此类问题的最常见原因,这篇文章列在靠近底部的“未显示框架”下:retokoradi.com/2014/04/21/…

标签: c++ opengl


【解决方案1】:

glutInitDisplayMode (... GLUT_DOUBLE) 告诉窗口系统使用双缓冲渲染,但您的代码中没有任何交换缓冲区调用。

基本上,当这种情况发生时,您总是会绘制到后台缓冲区中,并且窗口系统仅使用前台缓冲区的内容来绘制其窗口。那里的想法是,前缓冲区始终是完成的图像,并且在完成绘制帧后实际交换缓冲区时效果很好。但就目前而言,您的前端缓冲区始终未定义。

要解决此问题,请在 void display () 的末尾添加对 glutSwapBuffers () 的调用。这将复制/交换您的后台缓冲区和前台缓冲区,以便您的渲染输出可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多