mam 9 quadów wykonanych z trójkątów, na przykład:Użyj innego tekstury dla określonych trójkątów w VBO
Używam VBO
do przechowywania danych o nich - swoją pozycję i współrzędne tekstury.
Moje pytanie brzmi - czy można sprawić, że quad 5 ma inną teksturę niż pozostałe quady, używając tylko jednego VBO
i shader
? :
Zielony kolor oznacza tekstury 1 i żółty - tekstury 2.
Do tej pory mam:
GLfloat vertices[] = {
// Positions
0.0f, 0.0f,
...
// Texture coordinates
0.0f, 0.0f,
...
};
Tworzę VBO
używając że vertices[]
tablicy, a następnie mam wiążący swoją pierwszą fakturę m_texture1
(i również mieć dostęp do drugiego - m_texture2
) i wywołanie 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);
Moja 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;
}
I 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);
}
Więc w zasadzie używam tutaj tylko, że jedna faktura, bo nie mam pojęcia, jak można użyć drugiego jeden.
Dzięki za odpowiedź. Szczerze mówiąc, mam go w jednej fakturze, ale ponieważ potrzebowałem różnych stylów dla zewnętrznej i wewnętrznej tekstury (GL_REPEAT i GL_CLAMP), podzieliłem go na dwie części, ale może możliwe jest jakoś zmienić te parametry tylko dla wewnętrznego kwadratu? –
@Mosquito, nie w tym przypadku użyj dwóch tekstur. – Kimi
OK, jeszcze raz dziękuję. :-) –