Opengl es on android problem with object opsition on projection matrix

Opengl es on android problem with object opsition on projection matrix

我尝试使用 opengl es 3 显示对象。一切正常,直到我尝试设置相机视图。当我将 vPMatrix 与相机矩阵相乘时,投影矩阵对象就消失了。

            float[] projectionMatrix = new float[16];
            float[] vPMatrix = new float[16];
            float[] camera = new float[16];
            Matrix.frustumM(
                    projectionMatrix,
                    0,
                    -1,
                    1,
                    -1,
                    1,
                    3,
                    7
            );

            Matrix.setLookAtM(
                    camera
                    , 0
                    //where i am
                    , 0f
                    , 0f
                    , 1f
                    //what i looking for
                    , 0f
                    , 0f
                    , -1f
                    //where is top
                    , 0f
                    , 1f
                    , 0f
            );


            Matrix.multiplyMM(
                    vPMatrix,
                    0,
                    projectionMatrix,
                    0,
                    camera,
                    0
            );

我通过如下设置相机修复了该错误:

Matrix.setLookAtM(
                    camera
                    , 0
                    //where i am
                    , 0f
                    , 0f
                    , 5f
                    //what i looking for
                    , 0f
                    , 0f
                    , 0f
                    //where is top
                    , 0f
                    , 1f
                    , 0f
            );

但我不明白为什么旧版本不好(我在找 z)。如果有人能给我解释一下,请 post 你回答。

几何体很可能被 Viewing frustum 的近平面剪裁。请注意,如果几何图形不在近平面和远平面之间,则几何图形将被剪裁。

您在设置透视投影时指定到近平面的距离为 3,到远平面的距离为 7:

Matrix.frustumM(projectionMatrix, 0, -1, 1, -1, 1, 3, 7);

但是视角到世界中心的距离只有1:

Matrix.setLookAtM(camera, 0, 0f, 0f, 1f, ...);

你有2个选项。要么换个角度:

Matrix.setLookAtM(camera, 0, 0f, 0f, 5f, ...);

或者改变近平面和远平面。例如:

Matrix.frustumM(projectionMatrix, 0, -1, 1, -1, 1, 0.1, 100);