OpenGL超级宝典(第7版)笔记16 向量 矩阵 它们都有什么用
文章目录
前言
本篇并不是纯数学上的介绍,而是从实际应用的角度来想大家介绍向量矩阵的内容,所以说并不会十分枯燥,我们采用先介绍计算的细节和过程,然后介绍我们将在哪些地方用到它们,所以当大家看到复杂的计算时候不要抵触,这样或那样复杂的计算(比如矩阵乘法)都是为了能够实现各种各样的效果,并不是为了为难大家。
因为这并不是纯数学上的教学,所以我们并不会解释例如矩阵是怎么发明的,矩阵背后到底是什么(其实是多元一次方程组O(∩_∩)O)等等“数学”上的问题,我们只要知道怎么计算、一般要在哪里用就行了。
如果你想学习权威的数学上的内容,可以参考线性代数的书籍(但其实很多线性代数的知识我们并不会用到),教科书就行。
1 从坐标系开始
由于渲染都是在三维空间中展开,所以我们的所有点的坐标都是三维坐标,在OpenGL中有四大坐标其中包括:
1 对象坐标系(对于每个模型都会在建模的时候建立一个自己的坐标系,这是为了方便建模)
2 世界坐标系(当所有建模完成后要把这些模型放到一起,而这个坐标系就是世界坐标系)
3 视图坐标系(由于我们看到的画面是从一个特定的摄像机位置看过去的,所以会根据摄像机所建立的坐标系,用于将摄像机看到的画面处理出来)
4 裁剪和标准化坐标系(由于很多显示设备的不同,显示的大小比例都有所不同,并不是所有的物体都在我们的视线内,所以我们需要对这些坐标系进行标准化的转换,统一的进行缩放,这里用到的就是裁剪和标准化坐标系)
2 向量
2.1 向量基础
虽然说在数学上的向量是有起点和方向两个要素的,但是我们在OpenGL中并不考虑向量的起点,我们都认为向量的起点是原点,如果知道向量的两个顶点位置,那么只需要把终点位置减去起点位置就得到了向量的坐标。
对于坐标系来说都有一组基础的向量,分别指向XYZ轴的正方向(分别为i,j,k),而且它们的长度都为1,由于XYZ轴之间两两相互垂直,这组向量组成了一个正交体系,每个向量都可以由i、j、k来表示,比如下图:
ijk的相互垂直非常重要,当前我们很多的错误可能就来自于坐标系ijk并不相互垂直的问题。
2.2 向量运算
向量的长度(略)
点乘