000ddd00dd0d

学习笔记小站


  • 主页

  • 标签

  • 分类

  • 文章

  • 搜索

四元数 Quaternions

发表于 2019-04-29 | 更新于 2019-05-03 | 分类于 数学 Math

1. 数学定义

  在进行四元数对旋转的作用探讨前,我们先看一下四元数的定义,并不管三七二十一扔出一堆公式以供后续使用。首先四元数是一种超复数,与简单复数仅包含一个虚部$i$,四元数包含三个虚部$i,j,k$和一个实部,这里定义四元数入下:

$\hat{\textbf{q}}=(\textbf{q}_v, q_w)=iq_x+jq_y+kq_z+q_w \\ \textbf{q}_v=iq_x+jq_y+kq_z=(q_x,q_y,q_z)$
$i^2=j^2=k^2=-1, jk=-kj=i, ki=-ik=j,ij=-ji=k$
阅读全文 »

轴向角 Axis Rotation

发表于 2019-04-28 | 更新于 2019-05-01 | 分类于 数学 Math

1. 简单的想法

  一般来说我们可以很容易写出绕坐标轴$x,y,z$旋转任意角度$\theta$的旋转矩阵,这里分别用$\textbf{R}_x(\theta), \textbf{R}_y(\theta), \textbf{R}_z(\theta)$来表示。但更多时候,我们希望给出任意轴$\textbf{r}$和任意角度$\alpha$的旋转矩阵$\textbf{X}$。一个简单的想法即将$\textbf{s}$构成的局部坐标系$Orst$变换到$Oxyz$上,然后应用相应的旋转,最后反变换回去,如下图所示:
axis_rotation

阅读全文 »

欧拉角 Euler Angle

发表于 2019-04-27 | 更新于 2019-05-01 | 分类于 数学 Math

1. 定义

  欧拉角通过基于三个基础坐标轴的旋转角度生成一个矩阵,用于对坐标或坐标系的旋转。首先我们需要规定一个旋转顺序,这里按照Real-Time Rendering (4th Edition)中的规定,按照如下顺序进行旋转:

$\textbf{E}(h,p,r)=\textbf{R}_z(r)\textbf{R}_x(p)\textbf{R}_y(h)$

  一般定义:
    Yaw(偏航):y
    Pitch(俯仰):x
    Roll(翻滚): z

阅读全文 »

法向量变换 Normal Transformation

发表于 2019-04-23 | 更新于 2019-05-01 | 分类于 数学 Math

  在绘制物体的过程中,我们常常需要对物体的形状、位置等进行变换,从而可以从物体空间变换到世界空间,进而变换到相机空间,这些过程我们都可以通过矩阵乘法进行实现。对于点本身的位置$\textbf{p}$,假设我们有变换$\textbf{M}$,那么变换后的点位置为:

$\textbf{p'}=\textbf{Mp}$

  对于切向量,由于其可以视为切平面上的一点,与模型中的点位置变换是一致的,于是可以对切向量$\textbf{t}$做相同的变换:

$\textbf{t'}=\textbf{Mt}$

阅读全文 »

lookAt() 函数

发表于 2019-04-23 | 更新于 2019-05-01 | 分类于 OpenGL

  在OpenGL中我们可以借助gluLookAt()或glm::lookAt()函数设置或者获取相应的视角转换矩阵,从而将片元从世界坐标系转换到相机坐标系。接下来我们以glm::lookAt()为例讲述这一过程具体是如何实现的。首先我们可以看一下glm::lookAt()的函数声明:

1
2
3
4
5
6
template<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
);

阅读全文 »

蒙特卡洛积分 Monte Carlo Integration

发表于 2019-04-09 | 更新于 2019-05-01 | 分类于 数学 Math

  根据维基百科,蒙特卡洛积分法是基于随机数的数值积分方法,用于计算定积分。对于高维的积分该方法具有巨大优势,因为蒙特卡洛方法是基于随机采样的方法,而很多其他方法是基于grid的,即将空间分割为不同的grid,最终将每个grid中的计算结果汇总,在n维的情况下这些方法就是O(n)的空间复杂度,而蒙特卡洛仍为O(1),但要达到相同的精度,所需要的采样数量是否一定优于grid的方法,我暂时还未得到证明。

阅读全文 »

球面采样 Spherical Sampling

发表于 2019-04-07 | 更新于 2019-05-01 | 分类于 图形学 Computer Graphics

  本文探索了几种不同的在球面或半球面上采样的方法。

1. 轴向均匀采样(Uniform Axis)

  最容易想到的采样方式即在三个互相垂直的坐标轴$x$,$y$,$z$上单独进行均匀采样,最后将采样到的坐标值正则化即可,不过需要注意的是该采样方式可能取到$(0,0,0)$这个坐标。伪代码如下:

1
2
3
4
5
6
7
do
{
x = uniform(-1, 1);
y = uniform(-1, 1);
z = uniform(-1, 1);
}while((x,y,z) == (0,0,0));
return normalize((x,y,z));

阅读全文 »
000ddd00dd0d

000ddd00dd0d

一只沙雕企鹅
7 日志
3 分类
11 标签
© 2019 000ddd00dd0d
|