使用Android OpenGL ES 2.0繪圖之五:添加運動

傳送門 ☞ 輪子的專欄 ☞ 轉載請註明 ☞ http://blog.csdn.net/leverage_1229

        在屏幕上繪製圖像對於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);  
}  
        除非你不想讓繪製的對象與用戶交互,否則啓用這個渲染模式是一個很好的做法。現在準備解除去它的註釋了,因爲在下一節中會再次用到它。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章