D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵

本文介绍了在Direct3D(D3D)坐标系统下,如何将3D世界坐标映射到2D屏幕坐标,并通过平移矩阵实现特殊场景下的3D模型定位。通过World、View、Projection矩阵结合,反求出平移矩阵,以保持3D模型的变换不变。内容包括3D坐标到2D坐标的转换公式、齐次坐标、变换矩阵的运算以及平移矩阵的求解方法,并提供了具体的编程实现示例。
摘要由CSDN通过智能技术生成

D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵,有需要的朋友可以参考下。

D3D中绘画3D模型基本上就是靠3个矩阵World, View, Projection来联合进行模型位置定位、视角定位及透视变形的,这与2D绘制一个图形只需要给出屏幕上的一个像素坐标就能进行定位有着非常大的不同。在某些场合,我们想根据屏幕上的像素坐标来绘制3D模型,一般可以通过用正交投影代替透视投影就能轻松进行绘制,但在一些极其特殊的情况下我们还想让绘制出的3D模型保持原先指定的3个矩阵所有变换,这就需要通过这3个矩阵及目标像素点反求出一个平移矩阵,这篇文章就是介绍该怎么做的。

先简单介绍一下在D3D里3D空间坐标在不做任何变化情况下是怎么转换成2D屏幕坐标。D3D的空间坐标在3个轴范围是[-1,1],D3D绘画到2D屏幕上的区域叫做ViewPort,ViewPort的横坐标范围是[Left, Right],纵坐标范围是[Top, Bottom],ViewPort还有近点(near)和远点(far)2个值代表z轴,则D3D空间坐标里的一点sp(x,y,z)的x坐标Xsp对应到屏幕上坐标sc(x,y)的x坐标Xsc的对应公式就是(这个详细解释网上有,这里不再赘述):
X s c − L e f t R i g h t − L e f t = X s p − ( − 1 ) 1 − ( − 1 ) \dfrac{Xsc−Left}{Right−Left}=\dfrac{Xsp−(−1)}{1−(−1)} RightLeftXscLeft=1(1)Xsp(1)
让Width = Right - Left,上面公式最后就变成:
Xsc=(Xsp+1)∗Width/2+Left
同样得出y轴:
Ysc=(Ysp+1)∗Height/2+Top
z轴(虽然屏幕上是没有z坐标的,但这里给出是为了后面推导的时候能统一处理):
Zsc=Zsp∗(far−near)+near

接下来简单说一下齐次坐标,D3D系统里用得坐标并不只是(x,y,z),而是用4维坐标(x,y,z,w)来表示,这里齐次坐标与3维坐标的转换关系为:
[ x y z w ] = [ x / w y / w z / w 1 ] \left[\begin{array} {c} x \\ y \\ z \\ w \end{array} \right] = \left[ \begin{array} {c} x/w \\ y/w \\ z/w \\ 1 \end{array} \right] xyzw=

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值