我试图渲染一个纹理映射的立方体,作为我自学成才(或者说是SO教学)学习的一部分。将顶点索引和纹理坐标结合在一起
我发现this example网上说包顶点COORDS和纹理COORDS成一个阵列,像这样:
Vertex Vertices[4] = { Vertex(Vector3f(-1.0f, -1.0f, 0.5773f), Vector2f(0.0f, 0.0f)),
Vertex(Vector3f(0.0f, -1.0f, -1.15475), Vector2f(0.5f, 0.0f)),
Vertex(Vector3f(1.0f, -1.0f, 0.5773f), Vector2f(1.0f, 0.0f)),
Vertex(Vector3f(0.0f, 1.0f, 0.0f), Vector2f(0.5f, 1.0f)) };
我想它为一个金字塔形的对象,但它不工作这么好我的魔方。问题是我需要为与另一个面共享的同一个顶点使用不同的纹理坐标。所以我想,“哦,我知道!我只是将纹理坐标与索引打包在一起!”我快速创建了我的数据结构,将索引映射到纹理坐标,但现在我遇到了一个障碍:索引需要进入GL_ELEMENT_ARRAY_BUFFER
,并且纹理坐标需要进入GL_ARRAY_BUFFER
。
这是否意味着我无法将这些数据打包到一个缓冲区中?我必须将索引数组和纹理坐标数组拆分为两个单独的结构?此外,我只是意识到,顶点位置和纹理坐标之间不再有1:1映射......我不知道如何重写我的顶点着色器。
还是我应该按照教程的方式来做(将顶点位置和纹理坐标放在一起),并在必要时重复顶点?
我认为首先分离索引和顶点位置的整个想法是减少数据冗余,但是现在我必须在我想使用纹理后立即添加冗余?
不够公平......我可以接受这个事实:) – mpen 2012-01-03 02:06:41