2013-01-06 44 views
0

我開始學習的OpenGL,並使用以下站點:http://www.learnopengles.com/android-lesson-one-getting-started/OpenGL ES 2.0的削減在橫向模式下屏幕

但似乎我在這部分有一個問題(在縱向模式下正常工作) :

private float[] mViewMatrix = new float[16]; 

/** Store the projection matrix. This is used to project the scene onto a 2D viewport. */ 
private float[] mProjectionMatrix = new float[16]; 

/** Allocate storage for the final combined matrix. This will be passed into the shader program. */ 
private float[] mMVPMatrix = new float[16]; 

/** This will be used to pass in the transformation matrix. */ 
private int mMVPMatrixHandle; 

/** This will be used to pass in model position information. */ 
private int mPositionHandle; 

/** This will be used to pass in model color information. */ 
private int mColorHandle; 

/** How many bytes per float. */ 
private final int mBytesPerFloat = 4; 

/** How many elements per vertex. */ 
private final int mStrideBytes = 7 * mBytesPerFloat;  

/** Size of the position data in elements. */ 
private final int mPositionDataSize = 3; 

/** Offset of the color data. */ 
private final int mColorOffset = 3; 

/** Size of the color data in elements. */ 
private final int mColorDataSize = 4; 

public void onSurfaceChanged(GL10 gl, int width, int height) 
{  
    GLES20.glViewport(0, 0, width, height); 

    // Create a new perspective projection matrix. The height will stay the same 
    // while the width will vary as per aspect ratio. 
    final float ratio = (float) width/height; 
    final float left = -ratio; 
    final float right = ratio; 
    final float bottom = -1.0f; 
    final float top = 1.0f; 
    final float near = 1.0f; 
    final float far = 10.0f; 

    System.out.println("Height: " + height); 
    System.out.println("Width: " + width); 

    Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far); 
} 

public void onDrawFrame(GL10 gl) 
{ 
     final float eyeX = 0.0f; 
     final float eyeY = 0.0f; 
     final float eyeZ = 1.5f; 

     final float lookY = 0.0f; //Y direction of what user see 
     final float lookZ = -5.0f; //Z direction of what user see 

     // Set our up vector. This is where our head would be pointing were we holding the camera. 
     final float upX = 0.0f; 
     final float upY = 1.0f; 
     final float upZ = 0.0f; 

     GLES20.glClearColor(red, green, blue, clearcoloralpha); 
     GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);  
     Matrix.setLookAtM(mViewMatrix, 0, eyeX, eyeY, eyeZ, xax, lookY, lookZ, upX, upY, upZ); 

     // Draw the triangle facing straight on.   
     for(int i = 0; i < Triangles.size(); i++) 
     { 
      Matrix.setIdentityM(Triangles.get(i).getModelMatrix(), 0); 

      if(Triangles.get(i).Rotate()) 
      { 
       Triangles.get(i).rotation = (360.0f/10000.0f) * ((int) Triangles.get(i).last); 
       Triangles.get(i).last+=20; 

       //Rotates the matrix by rotation degrees 
       Matrix.rotateM(Triangles.get(i).getModelMatrix(), 0, Triangles.get(i).rotation, 0.0f, 0.0f, 1.0f); 
      } 
      else 
       Matrix.rotateM(Triangles.get(i).getModelMatrix(), 0, Triangles.get(i).rotation, 0.0f, 0.0f, 1.0f); 

      drawTriangle(Triangles.get(i).getFloatBuffer(),Triangles.get(i)); 
     } 
} 

private void drawTriangle(final FloatBuffer aTriangleBuffer, Triangle tri) 
{  
    aTriangleBuffer.position(0); 
    GLES20.glVertexAttribPointer(mPositionHandle, tri.DataSize, GLES20.GL_FLOAT, false, mStrideBytes, aTriangleBuffer);     
    GLES20.glEnableVertexAttribArray(mPositionHandle);   

    aTriangleBuffer.position(3); 
    GLES20.glVertexAttribPointer(mColorHandle, tri.ColorDataSize, GLES20.GL_FLOAT, false, mStrideBytes, aTriangleBuffer);     
    GLES20.glEnableVertexAttribArray(mColorHandle); 

    Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, tri.getModelMatrix(), 0); 
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0); 

    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0); 
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);  
} 

但是,當我試圖在橫向模式下移動三角形(向左或右)三角形得到「切斷」遠遠甩在了移動到的一個時(不顯示整個三角形)兩側。看起來他們是在他們實際不在的時候,就好像他們在屏幕之外一樣。如前所述,它似乎在縱向模式下工作正常。

橫向模式下的高度爲752和寬度1280(Galaxy Tab 2)。

這是否與這裏設置的項目矩陣有關?

感謝您的幫助!

+1

是752x1280正確的橫向模式?我認爲這應該是相反的方式。 – harism

+0

@harism你是完全正確的,謝謝你指出。發佈更新:) – Araw

+0

可能需要查看更多的代碼。這看起來對我來說很好... – jtwigg

回答

0

你是對的,問題是你移動你的相機:d

XAX應該留爲0.0F

Matrix.setLookAtM(mViewMatrix, 0, eyeX, eyeY, eyeZ, xax, lookY, lookZ, upX, upY, upZ);