1

OpenGL |ES2.0でオブジェクトをスケーリングする必要があります。シェーダー:

    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;" +
                "}";

投影:

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

図面の設定:

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

実際のレンダリング:

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

そして、それはスケーリングしません。三角形が見えて回転できます。ただし、スケーリングは機能しません。

4

1 に答える 1

4

OpenGLではベクトルは列ベクトルであるため、頂点シェーダーで行列の乗算の順序を変更する必要があります。

gl_Position = uMVPMatrix * vPosition;

于 2013-03-29T15:24:51.390 に答える