views:

28

answers:

1

I have a very odd problem, hopefully easily solved.

I am drawing a quad as a triangle strip. It simply has 2 triangles in the strip and I apply a texture containing an alpha channel to it.

For one of the triangles it seems the alpha is fine and exactly as I want it however for the first triangle it looks as though the alpha is either 1.0 or 0.0, rather than the correct in-between values.

What could be causing this? Have I assumed correctly that that's the problem? I shall attach an image so people can see what I mean:

Alpha problem

The weird thing is this is drawn as a triangle array and from 1 texture so I am unsure how I can change settings or affect the texture in some way. I thought maybe the triangle was being drawn in a different rotation but they are both anti-clockwise.

Code wise drawn like so:

    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);

So I am a little stumped if I'm honest.

Edit: Looking at this a bit more it's as though one of the triangles is being textured twice so the alpha obviously adds up and it gets a bit more applied. This probably means I'm doing something wrong with my triangle strip. I make the strip like so (started hand writing it out to check..):

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

Somehow I'm doing something wrong there, I just can't see it.

A: 

Apologies, it was the number of indices I was specifying in the draw elements call. I had further indices in the buffer and it was using those to draw another triangle.

All my own fault! Sorry about that :(

iexus