如何理解threejs的buffergeometry的index?

如何理解threejs的buffergeometry的index?_第1张图片

计算机图形学中最小的渲染单位,是一个由3个空间顶点(Vertex)构成的空间三角形,叫Polygon。

每一个polygon,会包含3个顶点在3个轴向上的9条数据,即

Vertex0: X0,Y0,Z0;

Vertex1: X1,Y1,Z1;

Vertex2: X2,Y2,Z2;

各种着色器,本质其实都是在得到3个顶点的具体空间坐标后进行线性插值。 作者:蒙古上单3DPunk https://www.bilibili.com/read/cv21280859/ 出处:bilibili

 

 但是通常的3D设计软件,例如Blender,默认的多边形不是三角面,而是四边面(face)。

每一个4边面包含4个顶点。

分别是:

a: X0,Y0,Z0;

b: X1,Y1,Z1;

c: X2,Y2,Z2;

d: X3,Y3,Z3;

如何理解threejs的buffergeometry的index?_第2张图片

但是计算机在处理4边面的时候,其实是将其划分成2个三角面来处理的。

 如何理解threejs的buffergeometry的index?_第3张图片

一个4边面,在转换成2个三角面的过后,为了描述2个三角形的数据,我们需要分别描述6个顶点,6条由x,y,z构成的数据。

三角形1:

    a: X0,Y0,Z0;

    b: X1,Y1,Z1;

    d: X3,Y3,Z3;

三角形2:

    b: X1,Y1,Z1;

    c: X2,Y2,Z2;

    d: X3,Y3,Z3;

这显然是极大的浪费,无论是从空间存储角度,还是从数据存取角度。

因此,为了解决这个问题,我们有了一套描述共用顶点数据的做法,即去重索引法——index。

即,我们首先告诉计算机,存在以下4个去除重复的顶点,分别是:

    a: X0,Y0,Z0;

    b: X1,Y1,Z1;

    c: X2,Y2,Z2;

    d: X3,Y3,Z3;

然后告诉计算机,由哪3个顶点构成1个基本三角形。

a,b,d

或者

b,d,c

这个数据就是buffergeometry的index数据。

而事实上,这个4边面,无论你是像上面1样拆分,还是像下图一样拆分,都是可以的。

如何理解threejs的buffergeometry的index?_第4张图片

而在描述三角形的时候,显然,顶点顺序可以是随意的。

你可以将2个三角形分别描述成:

a,b,c; c,d,a;

也可以描述成:

c,a,d;b,a,c;

将其放入buffergeometry的index里,渲染结果都是正确的。

 

 

 

 

你可能感兴趣的:(算法)