如何在没有GL_REPEAT的情况下将精灵包裹在一个立方体周围?

时间:2017-12-26 11:22:25

标签: opengl glsl texture-mapping

我正在使用OpenGL 3.2+。我创建了一个8个顶点的立方体VBO(每个顶点由8个浮点数组成:x,y,z,r,g,b,s,t),一个用于创建该多维数据集的面的EBO,以及一个用于绑定所有多维数据集的VAO在一起。

我有一个由数百个16x16精灵组成的精灵图册。我试图从该图集中获得1个精灵出现在立方体的所有边上(任何方向都很好)。

enter image description here

通过调整“s,t”参数,我可以让6个面孔中的4个起作用,但我似乎无法让最后2个面部显示除随机垃圾之外的其他任何东西。

我是否需要修改我的着色器以在地图集上执行某种自定义UV包装?

1 个答案:

答案 0 :(得分:1)

  

通过调整“s,t”参数,我可以让6个面孔中的4个起作用,但我似乎无法让最后2个面部显示除随机垃圾之外的其他任何东西。

至少你必须为立方体的2个边使用单独的顶点和属性。这意味着您需要至少8 + 2 * 2 = 12组不同的顶点属性。

enter image description here

         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个。