我有 9 个由三角形组成的四边形,如下所示:
我VBO
用来存储关于它们的数据——它们的位置和纹理坐标。
我的问题是 - 是否可以通过仅使用一个VBO
和使四边形 5 具有与其他四边形不同的纹理shader
?:
绿色代表纹理 1,黄色代表纹理 2。
到目前为止,我得到了:
GLfloat vertices[] = {
// Positions
0.0f, 0.0f,
...
// Texture coordinates
0.0f, 0.0f,
...
};
我正在VBO
使用该vertices[]
数组创建,然后绑定我的第一个纹理m_texture1
(我也可以访问第二个 - m_texture2
)并调用着色器:
glBindTexture(GL_TEXTURE_2D, m_texture1);
glUseProgram(program);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vboId); // for vertex coordinates
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0); // Vertices
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)(sizeof(GLfloat)*108)); // Texture
glDrawArrays(GL_TRIANGLES, 0, 108);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glUseProgram(0);
我的顶点着色器:
#version 330
layout (location = 0) in vec4 position;
layout (location = 1) in vec2 texcoord;
out vec2 Texcoord;
void main()
{
gl_Position = position;
Texcoord = texcoord;
}
和片段着色器:
#version 330
in vec2 Texcoord;
out vec4 outputColor;
uniform sampler2D tex;
void main()
{
outputColor = texture(tex, Texcoord) * vec4(1.0,1.0,1.0,1.0);
}
所以基本上我在这里只使用一种纹理,因为我不知道如何使用第二种纹理。