我有一个3d人形模型,我可以在上面定位衬衫的模型。在这种情况下,opengl渲染存在典型的z争斗问题。我发现唯一的解决方案是阻止隐藏的顶点渲染。是否有某种方法可以自动阻止隐藏的折点渲染,或者是否有任何算法可以移除隐藏的折点
发布于 2016-03-23 18:41:46
一种相对简单的方法是使用模板缓冲区。想法很简单。首先用glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE)和glStencilFunc(GL_ALWAYS, 1, 1)绘制衬衫。这将在模板缓冲区中设置位,无论您绘制衬衫的位置。然后用glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP)和glStencilFunc(GL_NOTEQUAL, 1, 1)绘制模型。只有当模型没有接触到衬衫已经绘制的像素时,它才会绘制模型。
缺点说明:您可能需要分割模型,并仅将其应用于预期会出现问题的部分(例如躯干),否则该技术将遮挡将绘制在衬衫上的模型的其他部分(例如手臂)。为了达到最好的效果,一定要剔除衬衫的背面。
发布于 2016-03-23 21:49:48
如果这是真正的z-fighting,即的不同面孔具有相同的深度,因此由于精度变化,出现在前面的每个像素或多或少是随机的,也可以考虑glPolygonOffset解决方案-在绘制衬衫之前启用GL_POLYGON_OFFSET_FILL并调用glPolygonOffset(1.0, 1.0) (或者使用其他参数;1.0是死记硬背的)。在禁用偏移填充或遵循glPolygonOffset(0.0, 0.0)的情况下绘制主体,这具有相同的效果。
多边形偏移的作用是在某些几何体接受深度测试之前轻触它的深度值。所以这或多或少说明,你给出的偏移量也应该在前面,只要它是相同的,或者只是在没有偏移量的东西后面一点点。
https://stackoverflow.com/questions/36170400
复制相似问题