Ich habe 9 Quads aus Dreiecken, wie folgt aus:Verwenden Sie unterschiedliche Textur für bestimmte Dreiecke in VBO
ich VBO
bin mit Daten zu speichern, um sie - ihre Position und Texturen Koordinaten.
Meine Frage ist - ist es möglich, das Quad 5 zu einer anderen Textur als der Rest von Quads mit nur einer VBO
und shader
haben? :
grüne Farbe darstellt Textur 1 und gelb - Textur 2.
Bisher bekam ich:
GLfloat vertices[] = {
// Positions
0.0f, 0.0f,
...
// Texture coordinates
0.0f, 0.0f,
...
};
Ich schaffe VBO
unter Verwendung dass vertices[]
Array, und dann Ich binde meine erste Textur m_texture1
(ich habe auch Zugriff auf die zweite - m_texture2
) und Aufruf Shader:
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);
Mein Vertex-Shader:
#version 330
layout (location = 0) in vec4 position;
layout (location = 1) in vec2 texcoord;
out vec2 Texcoord;
void main()
{
gl_Position = position;
Texcoord = texcoord;
}
und Fragment-Shader:
#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);
}
Also im Grunde hier nur ich bin mit, dass eine Textur, weil ich keine Ahnung, wie ich die zweite verwenden könnte ein.
Danke für die Antwort. Um ehrlich zu sein, habe ich es in einer Textur, aber weil ich verschiedene Stile für äußere und innere Textur (GL_REPEAT und GL_CLAMP) brauchte, habe ich es in zwei geteilt, aber vielleicht ist es möglich, diese Parameter nur für Inner Quad zu ändern? –
@Mosquito, nein in diesem Fall zwei Texturen verwenden. – Kimi
Ok, nochmals vielen Dank. :-) –