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

问题描述 投票:0回答:1

我正在使用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包装?

opengl glsl texture-mapping
1个回答
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个。

© www.soinside.com 2019 - 2024. All rights reserved.