Android OpenGL - 三角形条带中三角形的ES alpha透明度不同?

时间:2010-10-25 12:53:59

标签: android opengl-es textures alphablending

我有一个非常奇怪的问题,希望很容易解决。

我正在画一个四边形作为三角形条。它在条带中只有2个三角形,我将包含alpha通道的纹理应用于它。

对于其中一个三角形,似乎alpha很好并且完全符合我的要求但是对于第一个三角形,它看起来好像是1.0或0.0,而不是正确的中间值。

可能导致这种情况的原因是什么?我是否正确地认为那是问题所在?我将附上一张图片,以便人们可以看到我的意思:

Alpha problem

奇怪的是它被绘制为一个三角形数组并且从1个纹理中绘制出来,因此我不确定如何更改设置或以某种方式影响纹理。我想也许三角形是以不同的旋转方式绘制的,但它们都是逆时针方向的。

代码明智地绘制:

    gl.glBindTexture(GL10.GL_TEXTURE_2D, texturePointer);
    //Enable the vertices buffer for writing and to be used during our rendering
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    //Specify the location and data format of an array of vertex coordinates to use when rendering
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

    //Enable the texture buffer
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

    gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);

如果我诚实的话,我有点难过。

编辑:更多地看一下这就好像其中一个三角形被纹理化了两次,因此alpha显然会加起来并且它会得到更多的应用。这可能意味着我的三角形条带有问题。我像这样制作条带(开始用手写出来检查..):

//Top left
    vertices[vertPlace++] = 0.0f;
    vertices[vertPlace++] = height;
    vertices[vertPlace++] = 0.0f;

    //Bottom left
    vertices[vertPlace++] = 0.0f;
    vertices[vertPlace++] = 0.0f;
    vertices[vertPlace++] = 0.0f;

    //top right
    vertices[vertPlace++] = width;
    vertices[vertPlace++] = height;
    vertices[vertPlace++] = 0.0f;

    //Bottom right
    vertices[vertPlace++] = width;
    vertices[vertPlace++] = 0.0f;
    vertices[vertPlace++] = 0.0f;

    //Now set the indices
    indices[indiPlace++] = (short)0;
    indices[indiPlace++] = (short)1;
    indices[indiPlace++] = (short)2;
    indices[indiPlace++] = (short)3;

    //Top Left
    textureCoords[textPlace++] = 0.0f;
    textureCoords[textPlace++] = 1.0f;

    ///Bottom left
    textureCoords[textPlace++] = 0.0f;
    textureCoords[textPlace++] = 0.0f;

    //Top right
    textureCoords[textPlace++] = 1.0f;
    textureCoords[textPlace++] = 1.0f;

    //Bottom right
    textureCoords[textPlace++] = 1.0f;
    textureCoords[textPlace++] = 0.0f;

不知怎的,我在那里做错了什么,我只是看不到它。

1 个答案:

答案 0 :(得分:1)

道歉,这是我在绘图元素调用中指定的索引数。我在缓冲区中有更多的索引,它正在使用它们绘制另一个三角形。

我自己的错!抱歉:(