官术网_书友最值得收藏!

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.

主站蜘蛛池模板: 封丘县| 安徽省| 东港市| 获嘉县| 华蓥市| 体育| 桐乡市| 定襄县| 柯坪县| 乡宁县| 延边| 时尚| 宕昌县| 樟树市| 景德镇市| 桓台县| 临邑县| 镶黄旗| 石河子市| 科技| 开封县| 凉城县| 景洪市| 肇源县| 汽车| 桃源县| 乐亭县| 休宁县| 肇州县| 吉安县| 台北县| 长寿区| 哈巴河县| 宁陵县| 旬邑县| 崇礼县| 塔河县| 尚志市| 大渡口区| 彝良县| 南宫市|