У меня очень странная проблема, надеюсь, легко решаемая.
Я рисую четырехугольник в виде треугольной полосы. Он просто имеет 2 треугольника в полосе, и я применяю текстуру, содержащую альфа-канал.
Для одного из треугольников кажется, что с альфой все в порядке, и именно так, как я хочу, однако для первого треугольника это выглядит так, как будто альфа имеет значение 1,0 или 0,0, а не правильные промежуточные значения.
Что может быть причиной этого? Правильно ли я предположил, что это проблема? Я приложу изображение, чтобы люди могли видеть, что я имею в виду:
Странно то, что это рисуется в виде треугольного массива и из 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);
Так что я немного озадачен, если честно.
Редактировать: Глядя на это немного больше, создается впечатление, что один из треугольников текстурирован дважды, поэтому альфа явно складывается и применяется немного больше. Это, вероятно, означает, что я делаю что-то не так с моей треугольной полосой. Я делаю полоску вот так (начал писать руку, чтобы проверить ..):
//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;
Как-то я там что-то не так делаю, просто не вижу.