【发布时间】:2013-04-13 21:57:21
【问题描述】:
我必须执行以下操作:“将纹理拆分为多个部分。您有一个纹理,并且应该通过统一参数传递纹理坐标。”
具体来说,我有 15 个立方体,我想应用一个纹理来覆盖它们的上侧(制作一张大图)
问题是,我不知道统一参数是什么,以及如何使用它来解决问题。它可能与这些方法之一有关吗? http://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml
以下是我的代码的相关部分:
struct Vertex
{
glm::vec3 p;
glm::vec3 c;
glm::vec2 t; // texture coordinates
};
-
Vertex vert[] =
{
// x, y, z R, G, B
{glm::vec3(0, 0, 0), glm::vec3(1, 1, 1)}, //0
{glm::vec3(1, 0, 0), glm::vec3(1, 1, 1)}, //1
{glm::vec3(0, 1, 0), glm::vec3(1, 1, 1)}, //2
{glm::vec3(1, 1, 0), glm::vec3(1, 1, 1)}, //3
{glm::vec3(0, 0, 1), glm::vec3(1, 1, 1)}, //4
{glm::vec3(1, 0, 1), glm::vec3(1, 1, 1)}, //5
{glm::vec3(0, 1, 1), glm::vec3(1, 1, 1)}, //6
{glm::vec3(1, 1, 1), glm::vec3(1, 1, 1)}, //7
};
GLushort indices[]=
{
6,7,2,
7,3,2,
0,1,4,
1,5,4,
6,2,4,
2,0,4,
7,6,5,
6,4,5,
3,7,1,
7,5,1,
2,3,0,
3,1,0,
};
-
for(int i=0; i<15; i++)
{
m_matWorld[i] = glm::translate<float>( (float)(i%4), (float)(i/4), 0.0f);
}
-
for(int i=0; i<15; i++)
{
glUniformMatrix4fv( m_loc_world, 1, GL_FALSE, &(m_matWorld[i][0][0]) ); //az elso i azt jelenti, h hanyadik kockarol van szo a 15-bol
glDrawElements( GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);
}
【问题讨论】:
-
单个 (OpenGL) 纹理包含多个用于多个对象的较小纹理,称为 纹理图集。您可以搜索该术语以找到很多示例。
-
这似乎是一个解决方案,但似乎并不完全是他们想要我做的:/
-
"你有一个纹理,你应该传递纹理坐标 az uniform 参数。" ... 什么?您应该与您的老师重新验证纹理坐标应该是 uniform 而不是“属性”或其他东西。他的意思是纹理坐标,还是纹理sampler?