如何在没有 GL_REPEAT 的情况下将精灵包裹在立方体周围?
How do I wrap a sprite around a cube without GL_REPEAT?
我正在使用 OpenGL 3.2+。我创建了一个包含 8 个顶点的立方体 VBO(每个顶点由 8 个浮点数组成:x、y、z、r、g、b、s、t),一个 EBO 用于为该立方体创建面,以及一个 VAO 将它们全部绑定在一起。
我有一个由数百个 16x16 精灵组成的精灵图集。我正在尝试从该图集中获取 1 个精灵以显示在立方体的所有侧面(任何方向都可以)。
通过调整 "s,t" 参数,我可以让 6 个面中的 4 个工作,但我似乎无法让最后 2 个面显示随机垃圾以外的任何东西。
我是否需要修改着色器以在图集上执行某种自定义 UV 环绕?
By tweaking the "s,t" parameters, I can get 4 of the 6 faces to work, but I can't seem to get the last 2 faces to show anything other than random garbage.
至少你必须为立方体的两条边使用单独的顶点和属性。这意味着您至少需要 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 个。
我正在使用 OpenGL 3.2+。我创建了一个包含 8 个顶点的立方体 VBO(每个顶点由 8 个浮点数组成:x、y、z、r、g、b、s、t),一个 EBO 用于为该立方体创建面,以及一个 VAO 将它们全部绑定在一起。
我有一个由数百个 16x16 精灵组成的精灵图集。我正在尝试从该图集中获取 1 个精灵以显示在立方体的所有侧面(任何方向都可以)。
通过调整 "s,t" 参数,我可以让 6 个面中的 4 个工作,但我似乎无法让最后 2 个面显示随机垃圾以外的任何东西。
我是否需要修改着色器以在图集上执行某种自定义 UV 环绕?
By tweaking the "s,t" parameters, I can get 4 of the 6 faces to work, but I can't seem to get the last 2 faces to show anything other than random garbage.
至少你必须为立方体的两条边使用单独的顶点和属性。这意味着您至少需要 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 个。