【发布时间】:2012-03-10 02:25:44
【问题描述】:
所以我试图找出在 OpenGL 中渲染 3D 模型的最佳方法,因为它的某些纹理具有 alpha 通道。
当我启用深度缓冲区并开始绘制 3D 模型中的所有三角形时,如果它绘制的三角形位于模型中另一个三角形的前面,则它根本不会渲染后面的三角形它。问题是前面的三角形有alpha透明度,应该可以看透后面的三角形,但是后面的三角形还是没有渲染出来。
禁用深度缓冲区可以消除这个问题,但会产生一个明显的问题,即如果三角形是不透明的,那么如果在之后渲染,它仍然会在其后面渲染三角形。
例如,我正在尝试渲染一棵松树,它基本上是一些相互堆叠的锥体,具有透明的底部。下图显示了启用深度缓冲区时出现的问题:
您可以看到仍然可以看到透明三角形的轮廓。
下一张图显示了禁用深度缓冲区时的样子。
在这里您可以看到树后面的一些三角形是如何在树的其余部分前面渲染的。
任何想法如何解决这个问题,并正确渲染松树?
附:我正在使用着色器来渲染所有内容。
【问题讨论】:
标签: c++ opengl shader alpha-transparency depth-buffer