Unable to draw vertices with Z axis on screen

I need to draw some coordinates on the screen, the coordinates without the Z axis will be displayed, but the coordinates with the Z axis values ​​are not displayed. I tried to normalize the coordinates before building them, which worked. During normalization, all coordinates are obtained on the graph. But in the case of abnormal coordinates, the vertices with the Z axis are hidden.

OpenGL Version: ES 2.0

Coordinates:

float squareCoords[] = {
            202.00002f, 244.00002f, 0.0f,
            440.00003f, 625.00006f, 0.0f,
            440.00003f, 625.00006f, 0.0f,
            690.00006f, 186.0f,0.0f,

            202.00002f, 244.00002f, 50.0f,
            440.00003f, 625.00006f, 50.0f,
            440.00003f, 625.00006f, 50.0f,
            690.00006f, 186.0f, 50.0f
    };

indices:

short[] drawOrder = {
            0,1,2,3,
            0,4,
            1,5,
            2,6,
            4,5,6,7
    };

Drawing Code:

 GLES20.glDrawElements(
                GLES20.GL_LINES, drawOrder.length,
                GLES20.GL_UNSIGNED_SHORT, drawListBuffer);

On the surface Changed code:

public void onSurfaceChanged(GL10 unused, int width, int height) {
        mWidth = width;
        mHeight = height;

        GLES20.glViewport(0, 0, mWidth, mHeight);

        float ratio = (float) mWidth / mHeight;

        // this projection matrix is applied to object coordinates
        // in the onDrawFrame() method
        Matrix.orthoM(mProjMatrix, 0, 0f, width, 0.0f, height, 0, 50);

    }

Ondraw:

public void onDrawFrame(GL10 unused) {
        Square square = new Square();
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT|GLES20.GL_DEPTH_BUFFER_BIT);

        if (mFirstDraw)
            mFirstDraw = false;

        long time = SystemClock.uptimeMillis() % 4000L;
      float angle = 0.090f * ((int) time);
       // float angle = 90;
       // Matrix.setRotateM(mRotationMatrix, 0, angle, 0, 0, -1.0f);
       // angle += 0.7f;
        if (angle > 360f)
            angle = 0f;
        Matrix.setLookAtM(mVMatrix, 0, 0f, 0f, 4f, 0f, 0f, 0f, 0f, 1f, 0f);
        // projection x view = modelView
        Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
        // Creating rotation matrix
        Matrix.setRotateM(rotationMatrix, 0, angle, -1f, 0f, 0f);

        // rotation x camera = modelView
        float[] duplicateMatrix = Arrays.copyOf(mMVPMatrix, 16);

        Matrix.multiplyMM(mMVPMatrix, 0, duplicateMatrix, 0, rotationMatrix, 0);

        square.draw(mMVPMatrix);
    }

I rotate the chart to find out if the vertices are drawn on the Z axis.

I personally think that this line is the culprit, here I gave a great value of 50 and about a value of 0. It is interesting that these values ​​should be

Matrix.orthoM(mProjMatrix, 0, 0f, width, 0.0f, height, 0, 50);
+4
source share
1

, . 500

Matrix.orthoM(mProjectionMatrix, 0, 0f, width, 0.0f, height,0, 500);

:

float squareCoords[] = {
            202.00002f, 244.00002f, 0.0f,
            440.00003f, 625.00006f, 0.0f,
            440.00003f, 625.00006f, 0.0f,
            690.00006f, 186.0f,0.0f,

            202.00002f, 244.00002f, 200.0f,
            440.00003f, 625.00006f, 200.0f,
            440.00003f, 625.00006f, 200.0f,
            690.00006f, 186.0f, 200.0f
    };

.

+2

Source: https://habr.com/ru/post/1668902/


All Articles