我用搅拌机创建了一个3D场景,并计算了投影矩阵P (还有关于平移矩阵T和旋转矩阵R的信息)。正如我在标题中提到的,我试图用这些矩阵从我给定的相机C中计算出一个顶点(x,y,z)的z值或深度。
例如:顶点v = 1.4,1,2.3,相机的位置c = 0,-0.7,10。结果应该是10-2.3 = 7.7。谢谢你的帮助!
发布于 2015-07-26 08:37:25
通常在平移前应用旋转矩阵。所以
transform = R * T *是矩阵乘法,首先是T,然后是R。当然,我假设您已经知道如何执行矩阵乘法,我没有提供任何代码,因为不清楚您是否需要python代码段,或者您正在使用导出的模型。
然后应用最终的投影矩阵(我假设投影矩阵已经乘以视图矩阵)
final = P * transformtransform是以前获得的(4行4列)矩阵final矩阵是一个可以转换3D模型中的每个向量的矩阵,这里同样需要进行矩阵乘法(但在本例中,第二个操作数是一个colum向量,第4个元素是1)。
transformedVertex = final * Vec4(originalVertex,1)transformedVertex是列向量( 4x1矩阵)final是最终矩阵(4x4)1使其(4x1)*仍然是矩阵乘法一旦转换,顶点Z值将直接映射到Z缓冲区,并映射到深度值。
在这一点上,有一个操作是“按约定”完成的,并将Z除以W来规范它,然后在范围0.1之外的值被丢弃(最近于剪辑平面附近或最靠近剪辑平面)。
也请参阅这个问题:Why do I divide Z by W?
编辑:
我可能误解了你的问题,如果你需要相机和一个点之间的距离,那只是简单的。
function computeDistance( cam, pos)
dx = cam.x-pos.x
dy = cam.y-pos.y
dz = cam.z-pos.z
distance = sqrt( dx*dx + dy*dy + dz*dz)
end function示例
cameraposition = 10,0,0
vertexposition = 2,0,0上述代码
computeDistance ( cameraposition, vertexposition)输出
8发布于 2015-07-26 09:14:51
谢谢你的帮助,这是我想要的:
数据设置
结果
vec4 =R*T*v
ve4.z值是我正在寻找的结果。谢谢!
https://stackoverflow.com/questions/31634940
复制相似问题