[置頂] 使用Android OpenGL ES 2.0繪圖之五:添加運動

傳送門 ☞ Android兵器譜 ☞ 轉載請註明 ☞ http://blog.csdn.net/leverage_1229
html

傳送門 ☞ 系統架構設計 ☞ 轉載請註明 ☞ http://blog.csdn.net/leverage_1229
java

傳送門 ☞ GoF23種設計模式 ☞ 轉載請註明 ☞ http://blog.csdn.net/leverage_1229android


        在屏幕上繪製圖像對於OpenGL來講只是一個很是基本的功能,你也可使用其它的Android圖形框架類來實現,好比使用Canvas和Drawable對象。可是OpenGL ES確有過人之處,它支持在三維空間上移動和變換繪製對象,或以其它獨特的方式來創造極好的用戶體驗。
        在這一節中,將介紹如何使用OpenGL ES爲繪製的形狀添加一個旋轉運動的功能。
1、旋轉一個形狀
        使用OpenGL ES 2.0旋轉繪製對象也很簡單。先建立另外一個變換矩陣(一個旋轉矩陣),而後將它合併到投影和相機視圖變換矩陣就能夠了: 設計模式

private float[] mRotationMatrix = new float[16];  
public void onDrawFrame(GL10 gl) {  
    ...  
    // 爲三角形建立一個旋轉變換  
    long time = SystemClock.uptimeMillis() % 4000L;  
    float angle = 0.090f * ((int) time);  
    Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);  
  
    // 將旋轉矩陣合併到投影和相機視圖矩陣  
    Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);  
  
    // 繪製三角形  
    mTriangle.draw(mMVPMatrix);  
}  

        在對程序作了這些改動以後,若是三角形仍是轉不起來,請確認一下是否把GLSurfaceView.RENDERMODE_WHEN_DIRTY設置註釋掉了,其中的原因將在下一節中描述。
2、啓用持續渲染
        說到這裏,你應該在代碼中註釋掉了只有當數據發生改變時才渲染的渲染模式的代碼。不然,OpenGL只能旋轉一次,而後等待GLSurfaceView的容器調用requestRender()方法: 架構

private float[] mRotationMatrix = new float[16];  
public void onDrawFrame(GL10 gl) {  
    ...  
    // 爲三角形建立一個旋轉變換  
    long time = SystemClock.uptimeMillis() % 4000L;  
    float angle = 0.090f * ((int) time);  
    Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);  
  
    // 將旋轉矩陣合併到投影和相機視圖矩陣  
    Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);  
  
    // 繪製三角形  
    mTriangle.draw(mMVPMatrix);  
}  

        除非你不想讓繪製的對象與用戶交互,不然啓用這個渲染模式是一個很好的作法。如今準備解除去它的註釋了,由於在下一節中會再次用到它。
框架

相關文章
相關標籤/搜索