几何体就是一大堆关于形状、大小、相对位置的计算以及空间的性质的问题
前方高能反应!!!
如果你是计算机图形方面的新手,请细细的来阅读本书院的东西,完全弄懂这些关于CG方面的内容对于你后期学习和研发会至关重要。
关于几何形体的介绍
点、向量、矩阵和法线对于计算机图形学来说,就相当于字母表跟单词的关系一样。所以很多计算机图形学方面的书籍的前面几张一般都是以线性代数和几何学开始的。但是,对于大部分想要学习图形学编程的程序员来说,在学习编程之前,先来搞一搞数学,会变得非常的蛋疼。如果你觉得你对数学很反感或者不明白矩阵,而认为计算机图形学编程适合你的话,那么机会来了,我们公司的主音吉他手萌同学将带给你全新的体验,千万别放弃。
我们在写文章或者做教程的时候会充分考虑到大部分基础比较差的同学,尽可能的让这些技术不需要有相关的前置技术,即便在需要的时候,我们也会提供相关的教程,当然,为了生存下去,部分教程,我们是收费的,还希望大家多多支持。
什么是线性代数?什么是向量
到底什么是线性代数?就像我们之前说过的,线性代数是一大堆关于向量的数学问题。现在你可能会问:他喵的什么是向量呢?为何这个东西对计算机图形学会如此重要呢?
一个向量就会用一组数字来表示,这组数字的多少可以是任意的,比如我们常见的2、3、4维向量。比如下面的就是一个包含6个元素的六维向量:
V=(a,b,c,d,e,f)
其中a、b、c、d、e、f是实数。
把这些实数框在一起的原因就在于,他们的组合往往在解决某些问题的时候,或者是在特定的场景中,他们是有意义的。比如说,三维向量在计算机图形学中可以表示一个位置,也可以表示一个方向。我们可以通过一些非常强大的操作来修改这些向量的值。修改向量内容的操作就叫做线性变换。我们将会在后面来讨论更多关于变换方面的东西,现在你只需要知道他们非常好用就可以了。
点和向量
点和向量被用在很多科学领域。接下来我们将介绍这俩货与计算机图形学的关系。
在这里,一个点表示的是三维空间中的位置。一个向量则通常表示的是一个三维空间中的方向。向量可以想象成为一个指向任意方向的箭头。三维的点和向量当然会有相似的地方,那就是他们都可以表示成三个数字组成的一组数据:
V=(x,y,z)
在这里x、y、z都是实数。
你需要记住的是,当你跟物理学家或者数学专家讨论向量和点的问题的时候,他们并不会对这两个东西进行严格的区分,但是在计算机图形学中,你不能这么干。对那些数学家来说,一个向量可以是任意的,甚至是无限大的。
在计算机图形学中,我们通常使用齐次坐标来表示一个点,比如点(x,y,z),用齐次坐标表示如下所示:
P=(x,y,z,w)
当你需要让一个点被一个矩阵作用的时候,你就要使用这种齐次坐标的表现形式,主要是为了满足矩阵的运算法则。当然同志们不用被齐次坐标吓尿了,我们后面还会带领同学们来调戏一波他们。
关于变换
你现在可能还是有疑问,线性变换对于点和向量到底有什么影响呢?其实非常简单,最常见的操作一个点的方式为在三维空间中去移动这个点。这种移动一个点的操作叫的更通俗一点叫平移变换。它在计算机图形学中扮演了很重要的角色。
一个平移的操作就是一个相对于原点的线性变换。当你对一个向量使用平移变换的时候,计算机图形学里没有任何意义,因为向量指代的是一个方向,而与这个向量放在三维空间中的什么位置是么有关系的。在计算机图形学中,所有的长度相等,且指向同一个方向的向量,都是相同的。但是我们经常使用另一个常见的线性变换对向量进行操作,那边是:旋转。还有更多的变换,但是我们现在先来看看对点进行平移变换和对向量进行旋转变换。
P(点)->平移变换->Pt(点)
V( 向量)->旋转变换->Vt(向量)
当一个向量的长度是1的时候,我们说这个向量是单位向量。单位化一个向量的操作会改变一个向量,比如会把这个向量的长度变成1,但是它的方向不会被改变。大多数时候,我们会需要我们的向量是单位化过的。但是有的时候,我们也需要保持向量原来的长度,因为他们的这些信息可能对我们的某些算法会有作用。
比如,你连接了A、B两个点,这样就产生了一个向量,从A指向B,这个向量不仅包含了AB两点之间的方向关系,同时向量的长度还是AB两点之间的距离。而这些信息可能在某些算法里面是会被用到的。
单位化一个向量往往是很多bug产生的根源,所以每一次你在用一个向量的时候,都要想清楚,这个向量是否可以被单位化。
法线
法线在计算机图形学里被用来描述一个几何体的表面上的某一点的朝向。一个几何体表面的法线可以被看成是垂直于某一点的切平面的向量。
法线在着色的时候有着非常关键的作用,他们通常用来决定某一点颜色的亮度。
你们的支持是我们继续写作的动力,请帮我们转发。
集齐200个阅读量,下一篇文章本周将吐血加工并送上!