opengl es 实现旋转的三角形
生活随笔
收集整理的這篇文章主要介紹了
opengl es 实现旋转的三角形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼如下:
1、RotateOpenglActivity ?類為Activity類
2、渲染類 RotateRender
import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer;import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView.Renderer;public class RotateRender implements Renderer {static int one = 0x10000;private static IntBuffer trangleBuffer;private static IntBuffer squreBuffer;private float mTraRotate = 0.0f;private float mSquRotate = 0.0f;//三角形頂點private int[] vertices = new int[] {0,one,0,-one,-one,0,one,-one,0};//正方形頂點private int[] squres = new int[]{one,one,0,-one,one,0,one,-one,0,-one,-one,0};@Overridepublic void onDrawFrame(GL10 gl) {//清除顏色和深度緩存,并重置gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);gl.glLoadIdentity();//設置顏色gl.glColor4f(0.5f, 0.3f, 0.5f, 1.0f);//設置緩沖ByteBuffer tranBuffer = ByteBuffer.allocateDirect(vertices.length * 4);tranBuffer.order(ByteOrder.nativeOrder());trangleBuffer = tranBuffer.asIntBuffer();trangleBuffer.put(vertices);trangleBuffer.position(0);ByteBuffer squBuffer = ByteBuffer.allocateDirect(squres.length * 4);squBuffer.order(ByteOrder.nativeOrder());squreBuffer = squBuffer.asIntBuffer();squreBuffer.put(squres);squreBuffer.position(0);//開始繪制三角形gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);gl.glLoadIdentity();//允許設置頂點和顏色gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glTranslatef(-1.5f, 0, -6.0f);gl.glRotatef(mTraRotate, 0.0f, 1.0f, 0.0f);//設置三角形并繪制gl.glVertexPointer(3, GL10.GL_FIXED, 0, trangleBuffer);gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);//結束三角形gl.glFinish();//重置觀察矩陣模型gl.glLoadIdentity();gl.glTranslatef(1.5f, 0.0f, -6.0f);gl.glRotatef(mSquRotate, 1.0f, 0.0f, 0.0f);gl.glVertexPointer(3, GL10.GL_FIXED, 0, squreBuffer);gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);mTraRotate += 0.5f;mSquRotate += 0.5f;}@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {float ratio = (float) width / height;//場景大小gl.glViewport(0, 0, width, height);//投影矩陣gl.glMatrixMode(GL10.GL_PROJECTION);//設置視圖的大小gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);//選擇模型觀察矩陣gl.glMatrixMode(GL10.GL_MODELVIEW);gl.glLoadIdentity();}@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {//啟用平滑陰影gl.glShadeModel(GL10.GL_SMOOTH);//黑屏gl.glClearColor(0, 0, 0, 0);//設置深度測試的模型gl.glDepthFunc(GL10.GL_LEQUAL);//啟用深度模型gl.glEnable(GL10.GL_DEPTH_TEST);gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);}}3、效果圖如下:
總結
以上是生活随笔為你收集整理的opengl es 实现旋转的三角形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的秋招之路(开篇)
- 下一篇: xgboost、随机森林和逻辑回归的优缺