Android OpenGL - альфа-прозрачность ES отличается для треугольников в треугольной полосе?

У меня очень странная проблема, надеюсь легко решаемая.

Я рисую четырехугольник как треугольную полосу. У него просто 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;

Что-то я там что-то не так делаю, просто не вижу.


person iexus    schedule 25.10.2010    source источник


Ответы (1)


Извините, это было количество индексов, которые я указывал в вызове элементов рисования. У меня были дополнительные индексы в буфере, и он использовал их для рисования другого треугольника.

Все моя вина! Прости за это :(

person iexus    schedule 25.10.2010