我正在使用球形的广告牌精灵以及3D物体。因为四边形向后倾斜以匹配摄像机角度,所以它与紧跟在其后面的3D对象相交。当摄像机角度非常大时更加明显。以下链接提供了非常清晰的视觉效果。 http://answers.unity3d.com/questions/582680/billboard-issue-in-front-of-3d-object.html
有解决此问题的有效方法吗?
答案 0 :(得分:0)
我能想出的最佳解决方案是使用圆柱形广告牌进行深度计算,并使用球形四边形的实际位置。这允许您使用球形广告牌,同时确保四边形的深度保持不变。
此处参考的是广告牌ModelView Matrixes。 [x]:暗示值保持原样。
Cylindrical mvMatrix Spherical mvMatrix
[1][x][0][x] [1][0][0][x]
[0][x][0][x] [0][1][0][x]
[0][x][1][x] [0][0][1][x]
[x][x][x][x] [x][x][x][x]
首先修改ModelViewMatrix以进行圆柱形广告牌并生成深度顶点:
depthV = projectionMatrix * (mvm * vertex);
接下来设置球形广告牌的第二列值并像往常一样创建四元组:
mvm[1][0] = 0; mvm[1][2] = 0; mvm[1][1] = 1;
gl_Position = projectionMatrix * (mvm * vertex);
最后将depthV发送到片段着色器并将其用于深度计算。
float ndcDepth = depthV.z / depthV.w;
gl_FragDepth = ((gl_DepthRange.diff * ndcDepth ) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;
应在应用ModelView Matrix之前进行缩放。