1

I'm having some trouble figuring out, why my triangle is not rendered at the expected position.

I want to draw this triangle:

private float vVertices[] = { 0.0f, 0.0f, 0.0f, 1.0f,
                              1.0f, 1.0f, 0.0f, 1.0f,
                              1.0f, 0.0f, 0.0f, 1.0f};

First I create a Projection Matrix as described here

float aspect_ratio = 800.0f/480.0f; 
ortho_matrix(-aspect_ratio, aspect_ratio, -1.0f, 1.0f, -1.0f, 1.0f, PROJECTION_MATRIX);

Then I create a View Matrix and multiply those two:

Matrix.setLookAtM(VIEW_MATRIX, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);    
Matrix.multiplyMM(mMVPMatrix, 0, PROJECTION_MATRIX, 0, VIEW_MATRIX, 0);

Now I send the mvpMatrix to my Shader,

String vertexShader = "attribute vec4 vPosition; \n" +
                      "uniform mat4 orthoMatrix;" +
                      "void main()\n" +
                      "{\n" +
                      "    gl_Position = vPosition * orthoMatrix;" +
                      "}";

where the vertices are translated using this matrix. However, this is not the result I was expecting.

The following image is the result of the above code: Wrong Triangle Position

I expected the triangle to have its origin in 0, 0, 0 - so in the center of the screen like this: Expected Triangle Position

From the above code, can anyone tell me what I did wrong, or what I did miss?

edit Ok, it seems the koordinates are somehow mirrored... so it looks like this

1 ----+---- -1

When I inverse the aspect_ratio parameters in the ortho_matrix call it looks right. But why is this nessecary?

4

1 に答える 1

0

You're doing the vertex shader multiplication backwards.

It should be :

gl_Position = orthoMatrix * vPosition;

于 2012-08-20T18:20:50.650 に答える