Unity3d 游戏数学基础 未完结

4x4齐次坐标 (摘自《3D数学基础:图形与游戏开发》)

为了理解标准3D坐标是怎样扩展到4D坐标的,让我们先看一下2D中的齐次坐标,它的形式为(x, y, w)。想象在3D中w=1处的标准2D平面,实际的2D点(x,y)用齐次坐标表示为(x,y,1),对于那些不在w=1平面上的点,则次它们投影到w=1平面上。所以齐次坐标(x,y,w)映射的实际2D点为(x/w, y/w)。
因此,给定一个2D点(x,y),齐次空间中有无数多个点与之对应。所有点的形式都为(kx, ky, k), k != 0。这些点构成一条穿过齐次原点的直线。
当w=0除,除法未定义。因此不存在实际的2D点。然而,可以将2D齐次点(x,y,0)解释为“位于无穷远的点”,它描述了一个方向而不是一个位置。
4D坐标的基本思想相同。实际的3D点能被认为是在4D中w=1“平面”上。4D点形式为(x,y,z,w),将4D点投影到这个“平面”上得到相应的实际3D点(x/w, y/w, z/w)。w=0时,4D点表示“无限远点“,它描述了一个方向而不是一个位置。

叉乘运算

Result = a x b = |a| * |b| sin0
左手坐标系,将拇指朝向a的方向,食指指向b的方向,则中指指向为方向为叉乘结果的方向
右手坐标系,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。

矩阵

平移矩阵
T(p) = | 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 |
| px py pz 1 |

旋旋矩阵

绽放矩阵
S(p) = | px 0 0 0 |
| 0 py 0 0 |
| 0 0 pz 0 |
| 0 0 0 1 |

四元数
包含一个标量分量和一个三维向量分量,四元数Q可以记作:
Q = [w, (x,y,z)]
在3D数学中使用单位四元数来表示旋转,对于三维空间中旋转抽为n,旋转角度为a的旋转,如果用四元数表示,四个分量分别为:
w = cos( a/2 )
x = sin( a/2 ) cos (bx)
y = sin( a/2 ) cos (by)
z = sin( a/2 ) cos (bz);
其中cos(bx)、cos (by) 、cos (bz)分别为旋转轴的x,y,z分量

- 欧拉角 矩阵 四元数
旋转一个位置点 不支持 支持 不支持
增量旋转 不支持 支持,速度慢 支持,速度快
平滑插值 支持 基本不支持 支持
内存占用 3个数值 16个数值 4个数值
表达是否唯一 无数种组合 唯一 互为负的两种表示
可能会遇到的问题 万向锁 矩阵蠕变 误差累积导致非法
发布了22 篇原创文章 · 获赞 20 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览