我正在使用OpenGL 3.2+。我创建了一个8个顶点的立方体VBO(每个顶点由8个浮点数组成:x,y,z,r,g,b,s,t),一个用于创建该多维数据集的面的EBO,以及一个用于绑定所有多维数据集的VAO在一起。
我有一个由数百个16x16精灵组成的精灵图册。我试图从该图集中获得1个精灵出现在立方体的所有边上(任何方向都很好)。
通过调整“s,t”参数,我可以让6个面孔中的4个起作用,但我似乎无法让最后2个面部显示除随机垃圾之外的其他任何东西。
我是否需要修改我的着色器以在地图集上执行某种自定义UV包装?
答案 0 :(得分:1)
通过调整“s,t”参数,我可以让6个面孔中的4个起作用,但我似乎无法让最后2个面部显示除随机垃圾之外的其他任何东西。
至少你必须为立方体的2个边使用单独的顶点和属性。这意味着您需要至少8 + 2 * 2 = 12组不同的顶点属性。
x y z u v
0 : -1 1 1 0 0
1 : 1 1 1 1 0
2 : -1 -1 1 0 1
3 : 1 -1 1 1 1
4 : -1 -1 -1 0 0
5 : 1 -1 -1 1 0
6 : -1 1 -1 0 1
7 : 1 1 -1 1 1
8 : -1 1 1 1 1
9 : -1 1 -1 1 0
10 : 1 1 1 0 1
11 : 1 1 -1 0 0
注意,带有索引0,2,4和6的顶点属性集具有相同的u坐标为0.并且具有索引1,3,5和7的顶点属性集具有相同的u坐标1.
如果要将纹理包裹到四边形,则必须改变u和v坐标。因此,您必须添加分离的顶点属性集8,9,10和11.
注意,如果要添加垂直于立方体侧面的法向量,则需要24个顶点属性集。立方体的每一面都有4个。