【问题标题】:Farther object drawn in front near object (openGL)在近对象前面绘制的较远对象(openGL)
【发布时间】:2014-01-10 06:06:46
【问题描述】:

主要功能:

int _tmain(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitWindowSize (500, 500);

glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
glEnable(GL_DEPTH_TEST); 

glDepthFunc(GL_LESS);
glutInitWindowPosition (700, 100);
glutCreateWindow("Result");
glutDisplayFunc(display2);  
glutReshapeFunc(reshape2);
glutMouseFunc(main_mouse);
glutKeyboardFunc(keyboard);
glutMainLoop();

return 0;
}

Display2 功能:

void display2()
{   
glClearColor(1.0,1.0,1.0,1.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

//Green square
glColor3f(0.0,1.0,0.0);
glBegin(GL_POLYGON);
glVertex3f(0.5,0.5,-1.0);
glVertex3f(0.5,1.5,-1.0);
glVertex3f(1.5,1.5,-1.0);
glVertex3f(1.5,0.5,-1.0);
glEnd();

//Red square
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex3f(0.0,0.0,-2.0);
glVertex3f(0.0,1.0,-2.0);
glVertex3f(1.0,1.0,-2.0);
glVertex3f(1.0,0.0,-2.0);
glEnd();

glutSwapBuffers();
}

reshape2 函数

void reshape2(int width, int height)
{
glViewport(0,0,width,height);

glMatrixMode(GL_PROJECTION);

glOrtho(-3.0,3.0,-3.0,3.0,0.01,3.0);
}

我在 openGL 中遇到深度缓冲区问题。我尝试绘制 2 个正方形的红色和绿色。红色的位于绿色的后面。 红色方块的 z 值为 -2,绿色方块的 z 值为 -1。但红色方块显示在绿色方块的前面。我启用了深度测试,但仍然无法正常工作。我的程序有什么问题?

【问题讨论】:

  • 我从来没有使用过 GLUT,但是...我很确定您必须先创建一个窗口才能开始设置 GL 状态。窗口创建通常是创建和/或激活上下文的点...因此,您甚至在拥有执行此操作的渲染上下文之前就启用了GL_DEPTH_TEST

标签: opengl


【解决方案1】:

在调用glutCreateWindow 之前不要调用任何gl* 函数,所以将glEnableglDepthFunc 移到它之后。

每个gl 函数都会调用仅使用 GLUT 窗口创建的上下文。在此之前没有任何 OpenGL 函数有效。

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
相关资源
最近更新 更多