【发布时间】:2010-12-01 16:32:34
【问题描述】:
我对 OpenGL 非常陌生,所以请多多包涵。 :) 我正在学习 NeHe 的 OpenGL 教程,并且我开发了我自己的第 5 课版本,您可以在其中围绕原点旋转 3D 形状。我不确定我做错了什么,我几乎是逐行复制了代码,但我在我的表面上看到了奇怪的重叠。
是否有人对导致此类问题的原因有任何建议?
【问题讨论】:
标签: java opengl 3d swt clipping
我对 OpenGL 非常陌生,所以请多多包涵。 :) 我正在学习 NeHe 的 OpenGL 教程,并且我开发了我自己的第 5 课版本,您可以在其中围绕原点旋转 3D 形状。我不确定我做错了什么,我几乎是逐行复制了代码,但我在我的表面上看到了奇怪的重叠。
是否有人对导致此类问题的原因有任何建议?
【问题讨论】:
标签: java opengl 3d swt clipping
在我看来,您似乎缺少启用深度缓冲区或者可能使用 z 缓冲区创建帧缓冲区。 (这和游吟诗人写的差不多)
glEnable(GL_DEPTH_TEST);
【讨论】:
您的深度缓冲区似乎有问题。特别是看起来每个多边形都是在不考虑深度的情况下绘制的,即来自多边形的每个片段都通过了深度测试。这意味着多边形只是按照它们碰巧呈现的顺序相互绘制。
您是否使用类似的方法禁用写入深度缓冲区
glDepthMask( GL_FALSE )
有机会吗?
如果不是这样,那么您是否记得在每帧开始时清除深度缓冲区? Nehe 教程以
开头glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
清除深度和颜色缓冲区。确保您没有删除其中的 GL_DEPTH_BUFFER_BIT 部分。
HTH
【讨论】:
gl.glDepthMask(true); add 看看是否会有所不同。
哇,用一行就彻底解决了:
gl.glEnable(GL.GL_CULL_FACE);
我不知道它的作用,但在我使用的任何教程中都没有提到它,但我的演示现在完美运行。去谷歌看看那做了什么。 :D
【讨论】: