Games101 图形学入门笔记

纹理映射(Texture Mapping)

定义

可以用纹理映射来定义漫反射的系数,具体是它可以定义一个点的不同属性

演示图片

每一个三维物体的表面都可以用一个2维去表示,也就是如下图,这里我们就用一张纹理(Texture)来定义这个2维表面,不管怎么对这张图进行缩放分割,最后合到一起蒙到这个3维物体表面的过程就是映射,就可以确定3维物体上的点跟这张纹理上的坐标有一定的对应关系

演示图片

那做法就是每个模型在世界空间中的三角形的三个顶点都在纹理上有一个对应的坐标,至于这个坐标怎么来的,怎么匹配上的,一般就是美术做模型的去干这个事了,手动分,自动分现在在几何学上有这个研究方向

演示图片

既然3维中的顶点能对应到纹理,那纹理中自然也有坐标可以对应,这个坐标就叫UV,通常我们规定他们的范围就是从0到1,不然贴图的大小和形状

演示图片

有一种纹理在重复使用的过程中接缝处不会出现异常情况,比如在地板平铺过程中用的同样纹理,这种纹理叫做 tiled textures

演示图片

重心坐标

应用:不管是之前提到的顶点着色还是像素着色,都会有从顶点的法线或者着色结果插值到三角形内部每个点的情况,还有后面说纹理映射时世界坐标中三角形三个顶点取到了纹理中的色值之后插值到三角形内部像素,都需要使用到我们今天说的重心坐标插值的一个东西。插值的过程就是把一些已知点的属性平滑过渡到每个位置的点上。

定义:

**首先说明重心坐标只存在一个三角形上,不同三角形不同定义,假设有一个三角形a.b.c,组成一个三角形,那在这三角形内的任意一个点x,y都能表示为一个线性组合为 x,y=αA点 + βB点 + γC点,并且 **α+β+γ = 1,这样就能表示x,y在三角形平面上,然后我们又规定这三个值为非负的,他就一定在三角形内,这就叫重心坐标

演示图片

演示图片

如果我们通过中心的一个点向三个点做一个分割就会得到三个三角形,我们现在可以通过三个三角形的面积跟总的三角形的面积比来得到α,β,γ的值,就等于他们对应的点A,B,C的对面三角形(如A点的对面三角形就是Aa)的面积除以总面积

演示图片

根据上面定义就只这个三角形的重心点就是下面的公式,因为重心点划分出的三个三角形的面积是相同的,每个值就是3分之一

演示图片

演示图片

那这里就可以把任意一个三个点的属性通过重心坐标过渡到三角形内任意一个点上,任然是下面这个公式,然后重点提一下3D空间中的三角形如果投影到2D空间中以后,这个重心坐标是会发生改变的,所以如果我们想在投影后去取他在3D空间中的重心坐标需要用3D空间中的点去做运算,这里举例深度测试,就是用他原始的点去做的运算,然后把Z值存在深度缓存里的做法

演示图片