Son*_*man 1 opengl textures mipmaps tearing
我正在将3D对象(obj或3ds或collada文件)加载到我的openGL应用程序中.3环境非常大(所有轴都有几百米).我的问题是较小的3D物体(即〜<1-2m的数量级)似乎没有得到适当的深度测试.根据相机的变焦,我有时可以看到物体的背面(我一直在使用一个简单的立方体进行测试)或其他面部变得可见/不可见/撕裂.请参阅附图以获得更好的解释.我被引导相信问题是由于启用了mipmapping.我想要禁用mipmapping(有人可以建议一种简单,快速的方法)或者为mipmap对象设置更大的分辨率.还是我完全吠叫错了树?
谢谢
克里斯
Jul*_*rgé 11
这是z缓冲区精度不足的结果,这在具有巨大世界但(相对)小物体的游戏中是一个问题.直接的解决方案是尝试使用24位z缓冲区而不是16位缓冲区.解决这个问题的另一种方法是将游戏世界渲染两步,首先是远处的大物体,然后清除zbuffer,然后绘制更近的物体.
顺便说一句,这个特定的问题叫做z-fighting,这里有一个很好的资源:http://www.codermind.com/articles/Depth-buffer-tutorial.html
外卖是上面文章的最后一段:
真正的问题是你不能用相同的深度缓冲方程绘制很远的物体和非常接近的物体.如果你想绘制很远的物体,那么你需要通过进一步推动它来牺牲你的近景.为了避免剪切伪像,您可以使碰撞包络足够大,以使剪裁平面永远不会拦截平截头体内的现有对象.或者你可以让对象逐渐消失,因为它们靠近你的剪裁平面.
如果你想要保持近距离物体并同时在远处绘制山脉(或行星),那么你可以切割部分渲染.首先绘制远端对象,然后清除深度缓冲区并使用不同的z缓冲区渲染近处对象.