广告牌精灵与 3D 对象相交
Billboarded sprites intersecting 3D objects
我正在使用球形广告牌精灵和 3D 对象。由于四边形向后倾斜以匹配摄像机角度,因此它与紧靠其后方的 3D 对象相交。当摄像机角度非常 large.The 之后 link 提供非常清晰的视觉效果时,这一点更为明显。
http://answers.unity3d.com/questions/582680/billboard-issue-in-front-of-3d-object.html
有没有有效的方法来解决这个问题?
我能想到的最佳解决方案是使用圆柱形广告牌进行深度计算,使用球形广告牌作为四边形的实际位置。这允许您使用球形广告牌,同时确保四边形的深度保持不变。
此处供参考的是广告牌模型视图矩阵。 [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 矩阵之前完成。
我正在使用球形广告牌精灵和 3D 对象。由于四边形向后倾斜以匹配摄像机角度,因此它与紧靠其后方的 3D 对象相交。当摄像机角度非常 large.The 之后 link 提供非常清晰的视觉效果时,这一点更为明显。 http://answers.unity3d.com/questions/582680/billboard-issue-in-front-of-3d-object.html
有没有有效的方法来解决这个问题?
我能想到的最佳解决方案是使用圆柱形广告牌进行深度计算,使用球形广告牌作为四边形的实际位置。这允许您使用球形广告牌,同时确保四边形的深度保持不变。
此处供参考的是广告牌模型视图矩阵。 [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 矩阵之前完成。