假设我有以下数组(每个数组都有任意长度)并将它们用作备件箱;将它们中的每一个放入缓冲区,然后让openGL读取elements数组中的索引,并通过从每个数组块中挑选来构造顶点。
我们可以使用
构造一个顶点
{coordinate v1 ,普通 vn3 ,颜色 c1 ,texCoord vt4 }
或者我们可以使用
构造另一个顶点
再次{coordinate v1 ,再次正常 vn3 ,颜色 c3 ,texCoord vt2 }
请注意,“coordinates array”还不是顶点,它只提供构造顶点的位置。
在使用缓冲区和着色器的现代openGl中,对于初学者来说,这样的事情会非常困难吗?
CoordinatesArray :
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
NormalsArray :
vn 0.000000 0.000000 -1.000000
vn -1.000000 -0.000000 -0.000000
vn -0.000000 -0.000000 1.000000
vn -0.000001 0.000000 1.000000
vn 1.000000 -0.000000 0.000000
vn 1.000000 0.000000 0.000001
ColorsPallete :
c 1.0,1.0,1.0
c 0.0,1.0,0.0
c 0.2,0.3,0.2
TextureCoordArray :
vt 0.748573 0.750412
vt 0.749279 0.501284
vt 0.999110 0.501077
vt 0.999455 0.750380
vt 0.250471 0.500702
vt 0.249682 0.749677
vt 0.001085 0.750380
vt 0.001517 0.499994
vt 0.499422 0.500239
vt 0.500149 0.750166
vt 0.748355 0.998230
vt 0.500193 0.998728
vt 0.498993 0.250415
vt 0.748953 0.250920
IndexRecipiesArray :
f {1,2,1,4},{2,2,1,4},{3,2,1,4}
f {2,2,1,4},{3,2,1,4},{4,2,1,4}
f {4,5,1,4},{5,2,1,4},{6,2,1,4}
f {6,2,1,4},{7,2,1,4},{8,2,1,4}
f {1,2,1,4},{1,2,1,4},{1,2,1,4}
答案 0 :(得分:5)
这已经多次以类似的形式出现。但我无法找到完全相同的副本,所以无论如何我都会回答它。
OpenGL不直接支持此功能。它只能有一个索引数组,这意味着每个唯一的属性组合都需要一个顶点。
有一个非常接近的扩展名:AMD_interleaved_elements。它确实引入了每属性索引的概念。但是使用它有几个问题:
因此,典型的方法是在将顶点数据提供给OpenGL之前,在自己的代码中生成唯一的属性组合和相应的索引。我在回答这个问题时发布了一些伪代码:OpenGL - Index buffers difficulties。