我的矩形的顶点是这样定义的:
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
但质地不正确映射...
我的纹理图像是存在的:
而结果我得到的屏幕上:
是否有人看到我搞乱?
我转纹理打开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)。
当你调用glDrawElements
,那么它的顶点坐标由元素索引阵列中的索引查找。
但是,所有的其他属性,如纹理坐标,都抬起头来了。
你定义有4个顶点坐标,其形成具有宽度w
和高度h
四:
0------1 | | | | 2------3
x y
0: 0 0
1: w 0
2: 0 h
3: w h
四是由2个三角形绘制
这个矩形模型化与以下两个三角形:0,2,3和0,3,1。
[...]
GLES31.glDrawElements(GL_TRIANGLES, triangles.capacity(),GL_UNSIGNED_SHORT, triangles);
三角形数组包含三角形的坐标,表示为顶点的索引(例如0,2,3,0,3,1)。
所以,你必须设置的4个顶点坐标数组和6个索引。
当你想添加纹理坐标,然后你要关联的每个顶点坐标到相应的纹理坐标,而不是指数数组的每个元素! 顶点坐标和纹理坐标的数量必须等于,但不纹理的数量坐标索引的数组中的元素的属性和数目。
的顶点坐标和纹理及其属性(在这种情况下,纹理坐标)构成的一组数据。可以考虑2个维顶点坐标(x,y)和二维纹理坐标作为一个单一的4维坐标。
x y u v
0: 0 0 0 0
1: w 0 1 0
2: 0 h 0 1
3: w h 1 1
这意味着该属性"texture"
必须被关联到按以下顺序4个的纹理坐标的数组:
0, 0, 1, 0, 0, 1, 1, 1