3D数学,该怎么解决
3D数学
在看《3D数学基础:图形与游戏开发》,其中有一些不明白的地方.书上有推导根据旋转矩阵构造欧拉角,但到了c++实现时,书上给出了“从物体-世界坐标系变换矩阵到欧拉角”,“从世界-物体坐标系变换矩阵到欧拉角”的代码,我就晕了,大家伙给个思路
------解决方案--------------------
单纯表示旋转信息:3*3矩阵,欧拉角是三个角度值,四元数是四个数值。
3D变换采用齐次坐标系,所有的变换:平移,缩放,旋转都可以用矩形相乘统一表示。
一个点是P41(4*1行向量),矩阵是Mat44,则变换后的顶点是矩阵右乘向量Mat44 * P41。
4*4矩阵中:字母3*3部分为旋转矩阵,缩放由a,e,l决定,平移由tx,ty,tz决定。
a b c 0
d e f 0
g h l 0
tx ty tz 1
世界-物体坐标系相互转化只需要一个4*4矩阵,(书中是4*3矩阵忽略了最后一列)。而欧拉角影响的是3*3部分的旋转矩阵。
------解决方案--------------------
我都不用欧拉角。你可以完全不依赖欧拉角构建整个系统。
------解决方案--------------------
欧拉角只是貌似直观,实际上问题多多。四元数可以几乎不受限制地定义任意旋转,而且一样直观,计算还稍微简洁一点。
在看《3D数学基础:图形与游戏开发》,其中有一些不明白的地方.书上有推导根据旋转矩阵构造欧拉角,但到了c++实现时,书上给出了“从物体-世界坐标系变换矩阵到欧拉角”,“从世界-物体坐标系变换矩阵到欧拉角”的代码,我就晕了,大家伙给个思路
3D
数学
游戏开发
------解决方案--------------------
单纯表示旋转信息:3*3矩阵,欧拉角是三个角度值,四元数是四个数值。
3D变换采用齐次坐标系,所有的变换:平移,缩放,旋转都可以用矩形相乘统一表示。
一个点是P41(4*1行向量),矩阵是Mat44,则变换后的顶点是矩阵右乘向量Mat44 * P41。
4*4矩阵中:字母3*3部分为旋转矩阵,缩放由a,e,l决定,平移由tx,ty,tz决定。
a b c 0
d e f 0
g h l 0
tx ty tz 1
世界-物体坐标系相互转化只需要一个4*4矩阵,(书中是4*3矩阵忽略了最后一列)。而欧拉角影响的是3*3部分的旋转矩阵。
------解决方案--------------------
我都不用欧拉角。你可以完全不依赖欧拉角构建整个系统。
------解决方案--------------------
欧拉角只是貌似直观,实际上问题多多。四元数可以几乎不受限制地定义任意旋转,而且一样直观,计算还稍微简洁一点。