Repositioning the triangle

Our matrix-fu has really gotten us places. Let's go further.

I want to move the triangle out of the way. We'll do this by setting up another transformation matrix and then using it on the model when it's time to draw.

Add two new matrices named triTransform and triView:

    // Model variables
    private float[] triTransform;

    // Viewing variables
    private float[] triView;

Initialize them in onCreate as well:

        triTransform = new float[16];
        triView = new float[16];

Let's set the model matrix that positions the triangle in the initializeScene method (called by onSurfaceCreated). We'll offset it by 5 units in X and backwards 5 units in Z. Add the following code to initializeScene:

       // Position the triangle
        Matrix.setIdentityM(triTransform, 0);
        Matrix.translateM(triTransform, 0, 5, 0, -5);

Lastly, we use the model matrix to build the modelViewProjection matrix in onDrawEye. Modify onDrawEye, as follows:

    public void onDrawEye(Eye eye) {
        ...
        // Apply perspective transformation to the view, and draw
        Matrix.multiplyMM(triView, 0, view, 0, triTransform, 0);
        Matrix.multiplyMM(modelViewProjection, 0, perspective, 0, triView, 0);
        drawTriangle();
    }

Build and run it. You will now see the triangle further away and off to the side.

Note

To summarize one more time: the modelViewProjection matrix is a combination of the triangle's position transform (triTransform), the camera's location and orientation (camera), the current eye's viewpoint from CardboardView based on the phone's motion sensors (eye.getEyeView), and the perspective projection. This MVP matrix is handed to the vertex shader to determine its actual location when drawing the triangle on the screen.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset