在Open GL ES矩形的纹理的映射不正确

问题描述 投票:0回答:1

我的矩形的顶点是这样定义的:

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

而结果我得到的屏幕上:

enter image description here

是否有人看到我搞乱?

我转纹理打开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)。

java android opengl-es
1个回答
0
投票

当你调用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
© www.soinside.com 2019 - 2024. All rights reserved.