我正在尝试使用 OpenGL 创建模型,并尝试启用深度测试。
我在我的中使用这些命令main:
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glEnable(GL_DEPTH_TEST);
Run Code Online (Sandbox Code Playgroud)
这在我的显示中:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)
我什至尝试添加:
glDepthFunc(GL_LEQUAL);
Run Code Online (Sandbox Code Playgroud)
它不起作用。我仍然可以看到我认为是深度问题。这是显示问题的视频:https : //www.youtube.com/watch?v=OafrRH4Mzjc
我错过了什么?
编辑:复制的最小示例文件:
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glEnable(GL_DEPTH_TEST);
Run Code Online (Sandbox Code Playgroud)
gluPerspective(50, width / height, 0, 20);
^ wat
Run Code Online (Sandbox Code Playgroud)
zNear需要大于零(强调我的):
深度缓冲区精度受为
zNear和指定的值影响zFar。更大的比例zFar到zNear,就越有效深度缓冲器将处于彼此接近的其它表面之间进行区分。如果
r = zFar / zNear大约log2(r)丢失了一些深度缓冲区精度。由于rzNear 接近 0 时接近无穷大,因此zNear 绝不能设置为 0。
编辑:鉴于新发布的 MCVE:
int main(int argc, char **argv) {
/* Creation of the window */
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(900, 600);
glEnable(GL_DEPTH_TEST); // too soon
glutCreateWindow("Chess");
...
}
Run Code Online (Sandbox Code Playgroud)
就像datenwolf 说的那样:glEnable()在拥有当前 GL 上下文之前,您正在ing(glutCreateWindow()创建上下文并使其成为当前上下文)。
在 之后gl*()之前不要调用任何函数。 glutCreateWindow()
| 归档时间: |
|
| 查看次数: |
5040 次 |
| 最近记录: |