Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL程序只显示屏幕后面的内容_C++_Opengl - Fatal编程技术网

C++ OpenGL程序只显示屏幕后面的内容

C++ OpenGL程序只显示屏幕后面的内容,c++,opengl,C++,Opengl,当我运行OpenGL程序时,如果当前打开了一个文本编辑器,OpenGL程序会在屏幕上显示该部分。或者web浏览器处于打开状态,opengl程序会显示浏览器的该部分。以下是我的主要功能: int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize(50

当我运行OpenGL程序时,如果当前打开了一个文本编辑器,OpenGL程序会在屏幕上显示该部分。或者web浏览器处于打开状态,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();
}
我的显示功能:

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();
}
它不会给出任何错误或警告,只是显示屏幕上已经显示的内容。我错过了什么?谢谢。

glutInitDisplayMode(…GLUT\U DOUBLE)
告诉窗口系统使用双缓冲渲染,但代码中没有任何交换缓冲区调用

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

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

glutInitDisplayMode(…GLUT\U DOUBLE)
告诉窗口系统使用双缓冲渲染,但代码中任何地方都没有交换缓冲区调用

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


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

检查您的某些初始化是否报告了错误(例如,某些不支持的显示格式等),这是我出现此类行为的最常见原因。与几天前的问题相同。@RetoKoradi我搜索了该问题,但我找不到解决办法。这个问题的标题不是很好解释。当然,我很惊讶这个问题没有因为标题而被否决。关于“为什么……不能工作”的问题和没有解释是不受欢迎的,但是像这样无用的标题应该更受欢迎。是的,对于这些类型的问题,在你知道答案之前很难识别重复的问题。不过,这种情况很常见。我的个人网站上有一篇文章介绍了此类问题的最常见原因,这篇文章列在靠近底部的“框架未显示”下。检查您的一些初始化是否报告了错误(例如,一些不支持的显示格式等),这是我这种行为最常见的原因。和几天前的问题一样。@RetoKoradi我搜索了这个问题,但找不到解决办法。这个问题的标题不是很好解释。当然,我很惊讶这个问题没有因为标题而被否决。关于“为什么……不能工作”的问题和没有解释是不受欢迎的,但是像这样无用的标题应该更受欢迎。是的,对于这些类型的问题,在你知道答案之前很难识别重复的问题。不过,这种情况很常见。我的个人网站上有一篇文章,介绍了这类问题最常见的原因,这篇文章列在靠近底部的“框架未显示”下:。