首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用给定的投影矩阵计算顶点的z值(距摄像机的距离)

用给定的投影矩阵计算顶点的z值(距摄像机的距离)
EN

Stack Overflow用户
提问于 2015-07-26 08:12:23
回答 2查看 1.4K关注 0票数 0

我用搅拌机创建了一个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。谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-26 08:37:25

通常在平移前应用旋转矩阵。所以

代码语言:javascript
复制
transform = R * T 
  • R是旋转矩阵(通常是4行4列)。
  • T是翻译矩阵(4行4列)。
  • *是矩阵乘法,首先是T,然后是R。

当然,我假设您已经知道如何执行矩阵乘法,我没有提供任何代码,因为不清楚您是否需要python代码段,或者您正在使用导出的模型。

然后应用最终的投影矩阵(我假设投影矩阵已经乘以视图矩阵)

代码语言:javascript
复制
final = P * transform
  • P是投影矩阵(4行4列)。
  • transform是以前获得的(4行4列)矩阵

final矩阵是一个可以转换3D模型中的每个向量的矩阵,这里同样需要进行矩阵乘法(但在本例中,第二个操作数是一个colum向量,第4个元素是1)。

代码语言:javascript
复制
transformedVertex = final * Vec4(originalVertex,1)
  • transformedVertex是列向量( 4x1矩阵)
  • final是最终矩阵(4x4)
  • 顶点位于l3坐标上,因此我们添加1使其(4x1)
  • *仍然是矩阵乘法

一旦转换,顶点Z值将直接映射到Z缓冲区,并映射到深度值。

在这一点上,有一个操作是“按约定”完成的,并将Z除以W来规范它,然后在范围0.1之外的值被丢弃(最近于剪辑平面附近或最靠近剪辑平面)。

也请参阅这个问题:Why do I divide Z by W?

编辑:

我可能误解了你的问题,如果你需要相机和一个点之间的距离,那只是简单的。

代码语言:javascript
复制
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

示例

代码语言:javascript
复制
cameraposition = 10,0,0
vertexposition = 2,0,0

上述代码

代码语言:javascript
复制
computeDistance ( cameraposition, vertexposition)

输出

代码语言:javascript
复制
8
票数 1
EN

Stack Overflow用户

发布于 2015-07-26 09:14:51

谢谢你的帮助,这是我想要的:

数据设置

  • R旋转矩阵4x4
  • T平移矩阵4x4
  • v在x,y,z,1,4x1中的任意顶点

结果

  • vec4向量4x1 (x,y,z,w)

vec4 =R*T*v

ve4.z值是我正在寻找的结果。谢谢!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31634940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档