假设我有以下数组(每个数组都有任意长度)并将它们用作备件箱; 将它们中的每一个放入缓冲区,然后让openGL读取elements数组中的索引,并通过从每个数组块中挑选来构造顶点.
我们可以使用
{coordinate v1,normal vn3,color c1,texCoord vt4 } 构造一个顶点
或者我们可以再次使用
{coordinate v1,再次使用普通vn3,使用颜色c3,texCoord vt2 } 构建另一个顶点
请注意,"坐标数组"还不是顶点,它只提供构造顶点的位置.
在使用缓冲区和着色器的现代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}
这已经多次以类似的形式出现.但是我找不到完全相同的,所以无论如何我都会回答它.
OpenGL不直接支持这一点.它只能有一个索引数组,这意味着每个唯一的属性组合都需要一个顶点.
有一个非常接近的扩展名:AMD_interleaved_elements.它确实引入了每属性索引的概念.但使用它有几个问题:
因此,典型的方法是在将顶点数据提供给OpenGL之前,在您自己的代码中生成唯一的属性组合和相应的索引.我在这个问题的答案中发布了一些伪代码:OpenGL - Index缓解了困难.
归档时间: |
|
查看次数: |
47 次 |
最近记录: |