我对 openGL 渲染很陌生,无论我做什么,深度深度都不起作用。
我显然已经启用了深度测试( glEnable(GL_DEPTH_TEST);
),并且我清除了每帧的缓冲区。
但是 openGL 不断显示在其他对象前面渲染的最后一个对象...
你可以在我的 github 上看到我的代码。这些是相关的两个文件:Main loop 。我的主循环位于 src/tk/azertyfun/fps/Fps.java
和渲染在 src/tk/azertyfun/fps/objects/Mesh.java
.
我正在使用 java 和 lwjgl。
最佳答案
正如您所说,您在渲染循环开始之前正确启用深度测试:
glEnable(GL_DEPTH_TEST);
...并在每帧开始时正确清除缓冲区:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
通过 render() 方法在每个帧中绘制的第一件事是:
skybox.draw();
如果您查看 Skybox 中的 draw() 方法的实现,您会发现:
glDisable(GL_DEPTH_TEST);
因此,在您实际绘制任何内容之前,它会被禁用,并且永远不会再次启用。
关于java - OpenGL 深度缓冲区未应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22008173/