Вершины моего прямоугольника определены следующим образом:
0------1
| |
| |
2------3
Этот прямоугольник моделируется двумя следующими треугольниками: 0,2,3 и 0,3,1.
Этот списокзатем из шести вершин сопоставляются координаты текстуры следующим образом:
0.0f,0.0f
0.0f,1.0f
1.0f,1.0f
0.0f,0.0f
1.0f,1.0f
1.0f,0.0f
Но текстура неправильно сопоставлена ...
У меня есть изображение текстуры:
![enter image description here](https://i.stack.imgur.com/dj36Q.png)
и результат, который я получаю на экране:
![enter image description here](https://i.stack.imgur.com/vTfen.png)
Кто-нибудь видит, гдеЯ запутался?
Способ передачи текстуры в Open GL:
pointeurSurTexture = GLES31.glGetUniformLocation(programme, "texture");
pointeurSurCoordonnéesTexture = GLES31.glGetAttribLocation(programme, "coordonneesTexture");
GLES31.glActiveTexture(GLES31.GL_TEXTURE0);
GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, pointeursSurTextures[0]);
GLES31.glUniform1i(pointeurSurTexture, 0);
GLES31.glVertexAttribPointer(pointeurSurCoordonnéesTexture, NB_COORDONNEES_PAR_POINT_TEXTURE2D,
GLES31.GL_FLOAT, false,NB_COORDONNEES_PAR_POINT_TEXTURE2D*OCTETS_PAR_FLOAT,
tableauCoordonnéesTextures);
GLES31.glEnableVertexAttribArray(pointeurSurCoordonnéesTexture);
и мой фрагментный шейдер:
precision mediump float;
uniform sampler2D texture;
varying vec4 couleurSommet;
varying vec2 coordonneeTexture;
void main() {
gl_FragColor = couleurSommet * texture2D(texture,coordonneeTexture);
};
И как я рисую своютреугольники:
GLES31.glDrawElements(GL_TRIANGLES, triangles.capacity(),GL_UNSIGNED_SHORT, triangles);
Массив triangles
содержит координату треугольника, выраженную в виде индексов вершин (например, 0,2,3,0,3,1).