Skip to content

Files

Latest commit

author
fangshufeng
May 24, 2019
a8e50ff · May 24, 2019

History

History
88 lines (39 loc) · 3 KB

04-transform.md

File metadata and controls

88 lines (39 loc) · 3 KB

数学基础

请务必先阅读:

变换

接下来画重点

【重点1】:向量相减

如果2个向量相减,那么相减的结果的箭头指向被减向量。

image

例如上图 A B = A C + C B ,

那么 A B - A C = C B 最终箭头是指向B

通过平移得到$\vec{DB}$ 等于$\vec{AC}$

image

那么 A B - C B = A C = D B 最终箭头也是指向B

在三维空间中,有的时候无法明确表示出坐标,通过这个可以判断出,最后向量执行运算后的方向。

【重点2】:点乘

v k = |$\vec{v}$| | k | cos${\theta}$

如果将$\vec{v}$ 和 k 变成单位向量,那么点乘的结果就是直观的反应2个向量的夹角

v k = 1 1 cos${\theta}$

image

可以看出点乘的结果越大,说明2个向量方向越趋向一致,夹角越小。

【重点3】:叉乘

叉乘只在3D空间中有定义,它需要两个不平行向量作为输入,生成一个正交于两个输入向量的第三个向量。 如果输入的两个向量也是正交的,那么叉乘之后将会产生3个互相正交的向量。接下来的教程中这会非常有用

【重点4】:矩阵相乘是不遵守交换律的

矩阵相乘是满足交换律的,所以顺序很重要,矩阵相乘时,在最右边的矩阵是第一个与向量相乘的,所以你应该从右向左读这个乘法。建议在组合矩阵时,先进行缩放操作,然后是旋转,最后才是位移,否则它们会(消极地)互相影响

通过矩阵变换将图像逆时针旋转90度:

代码地址

通过矩阵变换绕着原点随时间旋转,修改如下

//    transform = glm::rotate(transform, glm::radians(90.0f), glm::vec3(0.0f,0.0f,1.0f));
//    shader.setMat4("transform", transform);
    
    transform = glm::rotate(transform, (float)glfwGetTime(), glm::vec3(0.0f,0.0f,1.0f));
    shader.setMat4("transform", transform);