Opengl学习(三)变换 矩阵相关知识

点乘:自行百度 点乘会在计算光照的时候非常有用。
叉乘:
a和b的叉乘公式为:

这里写图片描述

其中:

这里写图片描述

根据i、j、k间关系,有:

这里写图片描述

叉乘几何意义

这里写图片描述

在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。

在3D图像学中,叉乘的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。如下图所示:

在二维空间中,叉乘还有另外一个几何意义就是:aXb等于由向量a和向量b构成的平行四边形的面积。
三维中用两个向量的叉乘得到一个三维坐标系

组合矩阵时,先进行缩放操作,然后是旋转,最后才是位移。

GLM库从0.9.9版本起,默认会将矩阵类型初始化为一个零矩阵(所有元素均为0),而不是单位矩阵(对角元素为1,其它元素为0)。如果你使用的是0.9.9或0.9.9以上的版本,你需要将所有的矩阵初始化改为 glm::mat4 mat = glm::mat4(1.0f)。如果你想与本教程的代码保持一致,请使用低于0.9.9版本的GLM,或者改用上述代码初始化所有的矩阵。

// 译注:下面就是矩阵初始化的一个例子,如果使用的是0.9.9及以上版本
// 下面这行代码就需要改为:
// glm::mat4 trans = glm::mat4(1.0f)
// 之后将不再进行提示

glm::mat4 trans;
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
vec = trans * vec;
std::cout << vec.x << vec.y << vec.z << std::endl;

得到平移矩阵
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
得到旋转矩阵
trans=rotate(trans, radians(90.0f), vec3(0.0,0.0,1.0));//旋转
得到缩放矩阵
trans=scale(trans, vec3(0.5,0.5,0.5)); //缩放

猜你喜欢

转载自blog.csdn.net/u012456019/article/details/80806130