Android---OpenGL ES之添加動作
在屏幕上繪制對象是OpenGL的最基本功能,你可以使用其他的Android圖形框架類,如Canvas和Drawable對象來完成這些功能。OpenGLES提供了一些用于在三維空間中移動和變換被繪制的對象的能力,以及其他的創(chuàng)建良好用戶體驗的獨(dú)特方式。
在本文中,你需要使用前面幾篇博文中介紹的示例,給圖形添加旋轉(zhuǎn)動作。
旋轉(zhuǎn)圖形
使用OpenGL ES 2.0來旋轉(zhuǎn)一個繪制對象是相對簡單的。你要創(chuàng)建另外的變換矩陣(旋轉(zhuǎn)矩陣),然后把它跟投影和攝像機(jī)變換矩陣組合到一起:
- privatefloat[]mRotationMatrix =newfloat[16];
- public void onDrawFrame(GL10 gl) {
- ...
- // Create a rotationtransformation for the triangle
- long time = SystemClock.uptimeMillis() % 4000L;
- float angle = 0.090f * ((int) time);
- Matrix.setRotateM(mRotationMatrix, 0, angle, 0, 0, -1.0f);
- // Combine the rotationmatrix with the projection and camera view
- Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);
- // Draw triangle
- mTriangle.draw(mMVPMatrix);
- }
做了這些改變之后,如果你的三角形沒有旋轉(zhuǎn),那么就要確認(rèn)你是否完成了GLSurfaceView.RENDERMODE_WHEN_DIRTY設(shè)置。
啟用連續(xù)的渲染
如果你一直跟隨在學(xué)習(xí)本文的示例代碼,那么要確保像下面代碼那樣,注釋掉對渲染模式的設(shè)置,否則OpenGL只會旋轉(zhuǎn)圖形一次,然后等待來自GLSurfaceView容器的requestRender()方法的調(diào)用。
- publicMyGLSurfaceView(Context context){
- ...
- // Render the view onlywhen there is a change in the drawing data
- //setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);// comment out for
- auto-rotation
- }
除非對象的變化跟任何用戶交互無關(guān),否則設(shè)置一個開關(guān)標(biāo)記是一個好主意。
本文譯自:http://developer.android.com/training/graphics/opengl/motion.html