1. 数学定义
在进行四元数对旋转的作用探讨前,我们先看一下四元数的定义,并不管三七二十一扔出一堆公式以供后续使用。首先四元数是一种超复数,与简单复数仅包含一个虚部$i$,四元数包含三个虚部$i,j,k$和一个实部,这里定义四元数入下:
学习笔记小站
在绘制物体的过程中,我们常常需要对物体的形状、位置等进行变换,从而可以从物体空间变换到世界空间,进而变换到相机空间,这些过程我们都可以通过矩阵乘法进行实现。对于点本身的位置$\textbf{p}$,假设我们有变换$\textbf{M}$,那么变换后的点位置为:
对于切向量,由于其可以视为切平面上的一点,与模型中的点位置变换是一致的,于是可以对切向量$\textbf{t}$做相同的变换:
在OpenGL中我们可以借助gluLookAt()或glm::lookAt()函数设置或者获取相应的视角转换矩阵,从而将片元从世界坐标系转换到相机坐标系。接下来我们以glm::lookAt()为例讲述这一过程具体是如何实现的。首先我们可以看一下glm::lookAt()的函数声明:1
2
3
4
5
6template<typename T, qualifier Q>
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(
vec<3, T, Q> const &eye,
vec<3, T, Q> const& center,
vec<3, T, Q> const& up
);
根据维基百科,蒙特卡洛积分法是基于随机数的数值积分方法,用于计算定积分。对于高维的积分该方法具有巨大优势,因为蒙特卡洛方法是基于随机采样的方法,而很多其他方法是基于grid的,即将空间分割为不同的grid,最终将每个grid中的计算结果汇总,在n维的情况下这些方法就是O(n)的空间复杂度,而蒙特卡洛仍为O(1),但要达到相同的精度,所需要的采样数量是否一定优于grid的方法,我暂时还未得到证明。