Quintin B
Quintin B

Reputation: 5880

OpenGL ES 2.0 Scaling not working

I need to scale an object in OpenGL|ES 2.0. Shaders:

    private final String vertexShaderCode =
        "uniform mat4 uMVPMatrix;" +
        "attribute vec4 vPosition;" +
        "void main() {" +
        //the matrix must be included as a modifier of gl_Position
            "  gl_Position = vPosition * uMVPMatrix;" +
        "}";

    private final String fragmentShaderCode =
        "precision mediump float;" +
                "uniform vec4 vColor;" +
                "void main() {" +                   
                "  gl_FragColor = vColor;" +
                "}";

Projection:

        Matrix.orthoM(mProjMatrix,0,
              -1.0f,           // Left
               1.0f,           // Right
              -1.0f / ratio,   // Bottom
               1.0f / ratio,   // Top
               0.01f,          // Near
               10000.0f);

Drawing setup:

    // Set the camera position (View matrix)
    Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

    // Calculate the projection and view transformation
    Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);

Actual render:

    float[] scale = {5f,5f,1f};
    Matrix.scaleM(scale_matrix, 0, scale[0], scale[1], scale[2]);

    Matrix.multiplyMM(r_matrix, 0, scale_matrix, 0, mMVPMatrix, 0);
    // Combine the rotation matrix with the projection and camera view

    // Apply the projection and view transformation
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, r_matrix, 0);

And it will not scale. I can see the triangle and I can rotate it. But scaling does not work.

Upvotes: 1

Views: 3489

Answers (1)

Daniel
Daniel

Reputation: 169

Since vectors are column vectors in OpenGL you have to change the order of the matrix multiplication in your vertex shader:

gl_Position = uMVPMatrix*vPosition;

Upvotes: 4

Related Questions