DirectX投影变换矩阵的原理与推导,齐次裁剪空间的应用举例

本文详细探讨了DirectX Geometry Pipeline中的投影变换,与传统几何书中的投影变换不同,DirectX采用齐次裁剪空间进行转换。通过分析Perspective Camera和Orthographic Camera,阐述了如何构建透视矩阵和平行投影矩阵,重点讨论了深度信息在DirectX投影变换中的处理,包括w-buffer技术,以及如何将深度值映射到[0,1]范围内以确保深度测试的准确性。" 107931414,5649022,TCP/IP、Socket与HTTP连接详解,"['TCP/IP', '网络编程', 'Socket编程', 'HTTP']
摘要由CSDN通过智能技术生成

DirectX Geometry Pipeline的投影变换不是D3DXMatrixShadow或者几何书上的投影变换。
几何书上的投影变换是这样的:

分别是平行投影和透视投影,把空间中的三维物体变成二维平面上的图形。
而DirectX Geometry Pipeline的投影变换是这样的:

上图分别是 Perspective CameraOrthographic Camera 的视景体1(图中的坐标架代表摄像机坐标系),不同的视景体决定了不同的投影类型,常见的是透视投影和正投影。DirectX Geometry Pipeline的投影变换是把视景体都变成DirectX规定的长方体 H(齐次裁剪空间, Normalized Device Coordinates):
这里写图片描述
w>0:2
齐次坐标

P=(x,y,z,w)Hx/w[1,1]y/w[1,1]z/w[0,1]x[w,w]y[w,w]z[0,w]

前者是三维到二维的变换,后者是三维到三维的变换;
后者去掉深度信息(z坐标)就相当于前者;
前者补上深度信息可以得到后者。

Perspective Camera

现在来求 把Perspective Camera的视景体变成DirectX规定的长方体的透视矩阵,
思路是先计算三维到二维的透视投影,再加上深度向量。
这里写图片描述
E是透视投影线的汇聚点,P’ 位于投影平面上,该平面过点Q,法向是N(单位法向量)朝右,
质点几何易知P’的齐次坐标为 ((PQ)NE+(QE)NP,(PE)N)
深度向量 d=((PQ)NN,0) .

要还原P’的深度信息,只需 把P’的位置坐标加上深度向量d 即可

((PQ)NE+(QE)NP(PE)N,1)+((PQ)NN,0)=

((PQ)NE+(QE)NP(PE)N+(PQ)NN,1)

((PQ)NE+(QE)NP+(PE)N(PQ)NN,(PE)N)

但是因为含有 (PE)N(PQ)NN ,无法写成对 (P,1)的线性变换。这样我们不得不放弃使用真正的深度值了。

深度缓冲区是用来进行深度测试,处理物体的遮挡的。只要能保持相对深度关系,即使不是真正的深度值也没有关系。
如果我们把P’的齐次坐标和深度向量 d 直接相加:

((PQ)NE+(QE)NP
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值