绕任意轴旋转, 绕任意直线旋转矩阵推导

问题描述:

已知空间中的任意轴axis(u,v,w),点v绕该轴旋转$\theta$后得到点v’,求满足条件的矩阵$R_\theta$,使得有
$v’ = R_\theta v$

思路1:
先将旋转到z轴,然后引用绕z轴旋转公式,再将该轴再旋转回原来的地方。
思路2:
矩阵的本质是线性变换,我们通过几何方法对三个轴分别写出三个线性变换的表达式,再将其拼接成矩阵。

这里我们讲一下思路1,思路2见3D Math Primer for Graphics and Game Development, 2nd Edition,不管采取哪种方法,得到的结果肯定是一样的。

众所周知,把一头大象关进冰箱需要三步
1.打开冰箱门
2.把大象放进去
3.关闭冰箱门

Read more

投影矩阵之十万个为什么

part1. 关于概念

什么是投影矩阵?
投影矩阵是一个4x4齐次矩阵,将点从观察空间(viewing/eye/camera space)变换到裁剪空间(cliping space)(或者理解成空间的变换,这两者本质是一样的)

正交投影与透视投影的区别?
由视锥体(frustum)变换到裁剪空间。正交投影是由一个cube变换到裁剪空间。我们这里不讨论正交投影。

什么是裁剪空间?
一个四维的齐次空间,从几何上来看还是个视锥,但请不要用看待普通三维空间的方法去看这个空间!它具有一定的拓扑性质。对于透视投影来说,该空间下的点,其w分量有着特殊的意义(其实就是观察空间中的点的深度值$Z_e$,一会儿我们会提到)。

为什么叫裁剪空间?怎么裁剪

Read more

点到直线最短距离

问题描述:

对于三维空间中的直线方程

$p(t) = o + t\vec{d}$

其中$o$是原点, $\vec{d}$是单位方向向量。

对于给定的点$q$, 求出t的值, 使得直线上的点$p^\prime=p(t)$到$q$点的距离最近。

Read more

判断射线与是否球体相交, 并计算交点位置

在Ray-tracing中, 计算并判断射线与球体是否相交是不可少的
那么如何来判断一条已知的射线是否交于给定的球体呢?
要计算球体射线交点,我们首先要先给出球与直线的方程

首先是球面方程

$$|x-c|^2=r^2$$

  • x为球面上的点
  • c为球心
  • r为球的半径
Read more