2017-02-06 8 views
4

画面に座標をプロットする必要があります.Z軸のない座標は表示されますが、Z軸の座標は表示されません。私はそれらをプロットする前に座標を正規化しようとしました。正規化すると、すべての座標がプロットされます。しかし、標準化されていない座標の場合、Z軸を持つ頂点は隠されています。画面上にZ軸を持つ頂点を描くことができません

のOpenGLバージョン:ES 2.0

座標:

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

指数:

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

ドローコード:表面変更コードに

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

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は、Z軸上の頂点が描かれているかどうかを把握するために図を回転です。

私は個人的にこの行が犯人だと思う、ここで私が与えてくれたはるか値50と近い値0は、私は、これらの値は、ここでの問題は、「これまでwasnの値だった

Matrix.orthoM(mProjMatrix, 0, 0f, width, 0.0f, height, 0, 50); 
+0

-50を試しましたか? OpenGLは通常、-zを深度とみなします。 – BDL

答えて

2

あるべきだろうか十分に高い。私は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 
    }; 

その。

関連する問題