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