原文地址:http://www.arcsynthesis.org/gltut/Basics/Introduction.html
Part I. The Basics
开始图形编程是一个很艰巨的任务。渲染管道涉及一大堆步骤,每一个步骤都有一大堆数学操作。每一个步骤都需要计算出结果来交给下一个步骤。管理这些管道,使用它作为实现视觉效果的工具,就是图形程序猿的本质。
本书的这一部分就会介绍一些3D图形需要的一些基本数学知识。会介绍OpenGL定义的渲染管道和用Demo展示数据流是怎么通过这些图形管道的。
Vector Math
我们假设你对于几何和代数很熟悉,但是并不要求矢量数学。下面的材料会把你加快速度的带到更加复杂的内容,基础的矢量数学。
Vector可以有很多种意思,就根据我们谈论的是几何还是代数。无论是哪种,Vector都有维度;这表示该Vector在不同维度的数值。一个二维Vector被限制在一个平面,一个三维的Vector可指向任何物理空间。Vector可以有更高的维度,但是通常我们只处理二维到四维之间的维度。
技术上,Vector可以只包含一维。这么一个Vector我们叫Scalar。
在几何学方面,一个Vector可以代表两个概念:限定范围内的一个位置或者是一个方向。位置Vector代表空间中的特定的位置。例如:在这个图,我们有一个位置VectorA:
Figure 1.Position Vectors
Vector也可以代表一个方向。方向Vector没有一个原点;它单单在空间中代表一个方向。下面的图中的Vector都是方向Vector,但是VectorB和Vector D是一样的,即使他们是画在不一样的位置:
Figure 2.Direction Vectors
上面说到的就是几何学,但是Vector也可以用代数学描述:Vector是一组有序的数字,每个维度一个。所以一个二维的Vector有两个数字,一个三维的Vector有三个数字,四维的Vector就有4个数字啦。Scalars,在代数来说,就单单是个数字而已。
在Vector里的每一个数字叫做component。每一个component通常都有一个名字。在这里,Vector的第一个component叫做Xcomponent。第二个component是Y component,第三个component是Zcomponent,第四个component是W component。
当书写Vectors的时候,是用括号括起来的。所以一个3D的Vector是(0, 2,4);0就是X component,2就是Y component,4就是Z component。当用等式书写的时候,如下:
在数学等式里,Vector要么是粗体表示或者是头上带箭头。
在几何里画出Vector,位置Vector和方向Vector是不同的。然而,在代数里面位置Vector和方向Vector就没什么不一样的。唯一的不同就是我们怎么使用它。所以你可以把一个Vector考虑成是一个方向Vector,然后对它进行一些Vector的操作,然后再把结果考虑成是一个位置Vector。
虽然Vector有独立的数字component,一个Vector可以作为一个整体来进行一些数学运算。下面我们就来看一看Vector的几何和代数的表现。
VectorAddition。你可以把两个Vector相加,在几何中表现如下:
Figure 3.Vector Addition
请记住Vector在不改变它的值的情况下是可以移动它的位置的。所以如果你把两个Vector头尾相接,那么他们相加的结果就是从一个Vector的头指向最后一个Vector的尾。
Figure 4.Vector Addition Head-to-Tail
代数里,两个Vector相加的结果就是他们对应的components相加:
Equation 1.Vector Addition with Numbers
你对一个Vector的每一个component作相同的操作,就叫做component-wiseoperation(逐分量操作)。Vector的相加就是component-wiseoperation。任何在两个Vector上的component-wiseoperation都要求这两个Vector有相同的维度。
VectorNegation and Subtraction。你可以对一个Vector取反。就是把它的方向取反。
Figure 5.Vector Negation
在代数里,就是把Vector的每一个component都取反。
Equation 2.Vector Negation
就想标量运算一样,Vector的减法跟加法是一样的,就是一个Vector和另外一个Vector的取反相加。
Figure 6.Vector Subtraction
VectorMultiplication.Vector的乘法是Vector的操作中少有的几个没有图形表示的操作之一。把一个方向和另外一个方向相乘,或者把一个位置和另外一个位置相乘,都是没有意义的。但是这不代表它的代数等式没有作用。
把两个Vector代数相乘是一个component-wiseoperation,就跟加法是一样的。
Equation 3.Vector Multiplication
Vector/Scalar Operations.Vector可以有一个scalar操作。scalar只是一个数字。Vector可以跟一个scalar相乘。这会放大或者缩小Vector的长度。
Figure 7.Vector Scaling
在代数里,这是一个component-wiseoperation。Vector的每一个component都跟Scalar的每一个component相乘。
Equation 4.Vector-Scalar Multiplication
Scalar也可以跟Vector相加。就像Vector和Vector相乘一样,是没有图形表示的。这也是一个component-wiseoperation,Vector的每一个component都跟Scalar的每一个component相加。
Equation 5.Vector-Scalar Addition
VectorAlgebra. 理解一点点关于Vector的代数运算是很有帮助的。
Vector的相加和相乘,就跟Scalar的相加和相乘一样,遵循几个规则:
commutative,associative, and distributive.
Equation 6.Vector Algebra
Vector/Scalor 操作有相同的性质。
Length.Vector有长度。Vector的长度就是Vector方向的原点到终点的距离。
代数里,计算长度的等式如下:
Equation 7,Vector Length
使用了勾股定理来计算Vector的长度。这对Vector的任何维度都适用,而不单单是二维和三维。
单位向量(Vector)和正规化。一个Vector长度刚好是1的叫做单位向量。它表示用一个单位长度来指向一个方向。单位向量在数学等式中表示为a^。
一个向量通过除以它的长度或者乘以它长度的倒数就能转化为单向向量。
Equation8.Vector Normalization
在这个课程中,并不单单只是使用以上的一些数学计算。当需要的时候,会介绍和解释一些新用到的向量数学计算。通常那些数学计算都不是component-wiseoperation。
RangeNotation。这本书会频繁使用到一些标准的符号来表示一个范围的值。
如果一个值是在0和1之间,那么就说它就是在范围[0,1]之间。中括号就表示范围包括该值。
如果一个值是在0和1之间,但是并不包括该值的边界值,那么就说它是在(0,1]范围之间。括号表示不包括该值。
如果一个值是0或者是任何大于0的值,那么就表示为[0,∞)。如果一个值是小于0,那么就表示为(-∞,0)。
Part I. The Basics
Vector Math
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics Position Vectors](https://i-blog.csdnimg.cn/blog_migrate/2020dabd1cbc78e445c4aa9097765b82.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics Direction Vectors](https://i-blog.csdnimg.cn/blog_migrate/be896216537a8f8b6b51c6d01cc67fc3.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/568e069a3b366e8228e1e8b2dae542ab.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics Vector Addition](https://i-blog.csdnimg.cn/blog_migrate/8b1a2251e68624ea021fcc6dedae0929.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics Vector Addition Head-to-Tail](https://i-blog.csdnimg.cn/blog_migrate/e2948dcc94b1f7428b7c3a0369b610a4.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/705e4b7e64042368b20d0645ebef19eb.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics Vector Negation](https://i-blog.csdnimg.cn/blog_migrate/40328a1512e74a782ba0c9e3bccd2ae9.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/c4977d15745278a670f6851ba95e479b.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics Vector Subtraction](https://i-blog.csdnimg.cn/blog_migrate/385072c2aebc60e5350b8da6dfd7e661.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/8e4b895303da927258fc77746226013b.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics Vector Scaling](https://i-blog.csdnimg.cn/blog_migrate/6e4d21fbe270c992db76a2ab273dcbe1.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/5ff8b88e51e66c1cfa8bd5f58d361c8e.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/0145bcb65e9f43652cbdb138517b6560.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/5284bc744103c0f1969d21fddac8e74e.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/9f023cd8c26a65450af5372614c96332.png)
![OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics OpenGL学习之路:L <wbr>M <wbr>3D <wbr>G <wbr>P之二:The <wbr>Basics](https://i-blog.csdnimg.cn/blog_migrate/d060e10ae6e34b48c92abc39754a9889.png)