首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

求教变换矩阵到底怎么理解

2012-02-26 
求教变换矩阵到底如何理解?有一本书叫《3D数学基础:图形与游戏开发》里面讲的矩阵,知道他讲的什么意思,但是

求教变换矩阵到底如何理解?
有一本书叫《3D数学基础:图形与游戏开发》里面讲的矩阵,知道他讲的什么意思,但是仍然不知道D3D是如何运用的。

我又翻了翻专门讲图形学的,发现讲的还没这本3D数学细腻形象,就给了几个公式,然后是不起眼的几句话。

线性代数就更不用提了。

我的问题很简单:就是矩阵怎么运用的?这中间的数据是怎么传递和换算的?谁把谁给变换了?


下面是一本书里的公式,虽然看不懂,但是感觉这个公式已经很清晰了
移动矩阵:
1 0 0 0
0 1 0 0
0 0 1 0
dx dy dz 1



X轴旋转矩阵:
1 0 0 0
0 cosΘ sinΘ 0
0 -sinΘ cosΘ 0
0 0 0 1


这些都看不懂。。。不知道D3D里是怎么用这些公式的。。
到现在没有看到哪本书给个使用矩阵的例子的。大多都是给了一个变换前和变换后的结果,过程却一点不知。

我现在就知道一个点怎么变换。
比如:点H:(x, y)
然后我定义一个矩阵为:
cosΘ, sinΘ
-sinΘ, cosΘ

用这个点(x, y)左乘这个矩阵,得到的新的点,就是被变换后的点,就是旋转了Θ度(似乎是逆时针)

再比如有个3D的点H:(x, y, z)
然后定义一个矩阵:
1, 0, 0
0, cosΘ, sinΘ
0, -sinΘ, cosΘ

然后用这个点H,左乘这个矩阵,得到一个旋转后的点。

D3D最基本的就是这些坐标变换、坐标系转换了。我到现在还是搞不懂,
哪位朋友可以讲一下,或者找到一些可以让人很容易理解的教程也行。。我目前是实在没办法了。
万分感激。。

[解决办法]
D3d可以帮助你构造这些矩阵,不用你自己写,而且它提供函数作矩阵乘法,一般比你自己跑得快。同时你把构造好的矩阵传给pipeline,比如SetTransform(),之后,显卡对每个顶点都会用这个矩阵去乘。如果你用shader,那么你需要自己做乘法,但是shader也提供了矩阵乘的内建函数mul

对于那个平移矩阵,可以用D3DXMatrixTranslation()来构造,构造出来得和你上面写的理论上的是一样的。
对于那个旋转矩阵,可以用D3DXMatrixRotationX()来构造。

虽然d3d已经帮你写好了这些函数,但是如果你对3d math没有概念的话就不能灵活运用。比如矩阵乘的顺序,自己做插值,随意地变换坐标系,构造布告办。等等。
[解决办法]
把顶点和矩阵相乘,就会发现矩阵的某些项,扮演着为顶点变换(平移、旋转、缩放)提供参数的作用。(前人总结出来,填哪些那些项能得到平移矩阵/缩放矩阵/旋转矩阵)

比如平移矩阵,你自己拿一个顶点和它相乘,算一遍,就会发现它化简到最后一步时的算式,和顶点平移算式是一样的。旋转、缩放也是如此。

那么为什么还要和矩阵相乘?直接用平移算式、旋转算式、缩放算式不就行了?

不行~因为靠矩阵来计算可以减少计算量。

一个顶点要进行多次变换,比如平移后旋转再平移之后再缩放,用简单算式得算4遍,矩阵只要算一遍。

原理就是公式:(顶点×矩阵A)×矩阵B = 顶点×(矩阵A×矩阵B),即矩阵接合律的推广。(矩阵一般不遵守分配律,所以顶点变换有先后顺序,一个顶点平移再旋转,和旋转再平移,得到的位置不同)

一个3D程序中,可能很多顶点都进行同一套变换。用简单算式,n个变换对m个顶点,就得算n×m遍。把n个变换做成矩阵,用矩阵乘法接合到一起,那最后m个顶点,每个只要同矩阵做一次乘运算,就可以得到变换后的位置。计算量大大降低。

而且GPU硬件上为矩阵运算提供了硬件线路。

以上是偶薄弱的数学知识对矩阵变换的浅显理解,不敢保证都说对了。
[解决办法]
这样看来楼主知道矩阵的计算,而不清楚D3D图形管线

建议楼主看D3D图形管线方面的东西就可以了
[解决办法]
那个就是要平移的距离阿。
矩阵就是对多元一次方程组的简写。你想平移的方程位
x' = x + dx
y' = y + dy
z' = z + dz

把各个元都补齐了就是
x' = 1*x + 0*y + 0*z + dx*1
y' = 0*x + 1*y + 0*z + dy*1
z' = 0*x + 0*y + 1*z + dz*1

把系数写成矩阵形式就是那个平移矩阵了

热点排行