3D图形数学速成课(NOTE)3

楼主的文章写得很犀利,通俗易懂。

现在有个问题想向楼主请教。

在directx中,我想自己写投影矩阵的逆矩阵,其中x、y、z这些都

好实现,但是w这项是对以前z求倒数,不知道怎么办...

主要矩阵与向量相乘时,是向量与矩阵的列进行点积,也就是相乘。

但要怎么实现相除呢。

最后还希望楼主能否写一篇关于逆矩阵的实现的文章喃,谢谢啦!

Re:  Twinsen 2010-09-11 11:40发表 [回复] [引用] [举报]
回复cengfeng:多谢对文章的关注:)透视矩阵是不可逆的,因此不能够求出它的逆矩阵.不知道为什么要求它的逆矩阵呢?
Re:  cengfeng 2010-09-11 14:03发表 [回复] [引用] [举报]
回复Twinsen: 你好! 我打算实现一个LOD地形的演示程序, 并且演示摄像机(平截头体)与地形之间的剔除关系, 并以线框模式来勾勒平截头体。 我在描绘平截头体时, 通过阅读你的一系列文章后想到了在cvv空间里来建模, 然后通过逆透视矩阵把模型还原成平截头体, 当然透视矩阵的变换是没有进行透视除法的, 所以变换后还要乘上原来的Z, 也就是除以变换后的W。 通过矩阵来变换就有很多的好处,在楼主前面的文章也提到过。 这样的话就可以把模型的顶点数据类型写成DX托管, 并且更新位置时也不再去锁定顶点缓存和解锁顶点缓存。 而且在程序里能实时调节摄像机远平面。 所以如果不用DX提供求逆的函数,而自己来实现要怎么做? 话说求逆函数效率不是很高,如果能像求相机矩阵的逆矩阵那样简便,而不用函数来求那多犀利。 [e06]
Re:  Twinsen 2010-09-12 10:08发表 [回复] [引用] [举报]
回复cengfeng:我觉得这个需求可以通过定义两个相机来完成.第一个相机用来作地形剔除,并且渲染出其视锥体的线框.第二个相机用来观察整个场景,包括剔除处理后的地形以及第一个线框渲染的相机.不是很简单清楚么?
Re:  cengfeng 2010-09-12 12:32发表 [回复] [引用] [举报]
回复Twinsen:嗯,我就是用的2个相机来做的,观察的相机它是任意移动和旋转的,这个我是用相机矩阵的逆矩阵来处理,关键的是这个平截头体的画法我是用的是CVV的坐标的一个长方体来描述的,要通过透视矩阵的逆矩阵来变换成平截头体。楼主的意思是直接在世界坐标系中建立一个平截头体,但这样做如果要更改平截头体的参数,比如我想调节fov的大小,或者改变远裁剪面的距离那么就得锁定顶点缓存来做,很麻烦。。。
Re:  Twinsen 2010-09-13 10:37发表 [回复] [引用] [举报]
回复cengfeng:透视矩阵是不可逆的,所以没办法求. 但求CVV中的点在Frustum中对应的点或者射线是可以通过映射关系通过非矩阵的方式求出,拾取(picking)就是一个很好的例子.如果非要这么实现你的需求,就求这个映射关系把,从透视投影矩阵的推导原理很容易就可以求出.
Re:  cengfeng 2010-09-23 22:09发表 [回复] [引用] [举报]
回复Twinsen:楼主,  这几天看了一下有关矩阵和行列式的内容, 你对透视投影矩阵不可逆的说法有误。 首先透视矩阵的行列式为-b·n^2 ≠ 0, 根据定理有行列式不为零则此矩阵必定有逆矩阵。 并且此逆矩阵为(1,1) = 1/n ; (2,2) = 1/n ; (4,3) = 1 ; (3,4) = 1/b ; (4,4) = -a/b ; 其余元素都为0。 其实最开始我就说过我已经用DX的函数求出了透视矩阵的逆矩阵, 可能楼主没注意我说的这个内容。 我最开始就是调用DX的求逆矩阵函数来实现程序里的平截头体的。 通过用函数调用来计算效率略低了点。现在我看了矩阵的相关知识,已经明白了。
Re:  Twinsen 2010-09-27 10:19发表 [回复] [引用] [举报]

回复cengfeng:好!多谢指教,我回去研究研究!










楼主的文章让我受益匪浅,很感谢!有个问题请教一下,D3D中有如下两个D3DXMatrixPerspectiveLH()和D3DXMatrixPerspectiveOffCenterLH()生成透视矩阵的函数,第一个我理解,第二个各个参数的意思我都明白,但就是不知道这个函数和第一个有什么区别?及它一般在什么情况下使用?谢谢!
Re:  Twinsen 2010-10-11 18:42发表 [回复]
回复rabbit729:很高兴让你有收获:)这两个方法正是上面的特殊情况方程和一般情况方程所描述的.大多数情况下使用前一个方法就可以了,但是如果你的投影平面不是相对于原点对称的话,比如(left, top, right, bottom)范围是(0, 0, 2, 2),而不是(-1, -1, 1, 1)这样对称的,则需要使用第二个方法.


8楼  rabbit729 2010-10-12 15:27发表  [回复] [引用] [举报]
感谢楼主的回答!你说的投影平面不是相对于原点对称时使用特殊情况的函数,但是我想象不出投影平面不是相对于原点对称时的情形,这种非对称情况在什么情况下比较常见?还请楼主详解,谢谢!
Re:  Twinsen 2010-10-12 17:54发表  [回复]
回复rabbit729: 至少在编写API无关的图形引擎的时候可以使用它,因为OpenGL只有一般情况矩阵的设置函数,所以需要在D3DXMatrixPerspectiveOffCenterLH()和glFrustum之间作切换:)









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值