2010-10-25 1 views
0

У меня очень странная проблема, надеюсь, легко решить.Android OpenGL - прозрачность ES alpha для треугольников в треугольной полосе?

Я рисую квадрат как полосу треугольника. Он просто имеет 2 треугольника в полосе, и я применяю текстуру, содержащую альфа-канал к ней.

Для одного из треугольников кажется, что альфа отлично и точно так же, как и я, но для первого треугольника это выглядит так, как если бы альфа была 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); 

Так что я немного озадачен, если я честен.

Редактирование: немного больше похоже на то, что один из треугольников текстурируется дважды, поэтому альфа, очевидно, складывается, и она становится немного более примененной. Вероятно, это означает, что я делаю что-то не так с моей полосой треугольника. Я делаю полосу, как так (начал писать его руку, чтобы проверить ..):

//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

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

Все по моей вине! Извините, что :(