日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android OpenGL ES(十)绘制三角形Triangle .

發布時間:2024/4/13 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android OpenGL ES(十)绘制三角形Triangle . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三角形為OpenGL ES支持的面,同樣創建一個DrawTriangle Activity,定義6個頂點使用三種不同模式來繪制三角形:

?

float vertexArray[] = {-0.8f, -0.4f * 1.732f, 0.0f,0.0f, -0.4f * 1.732f, 0.0f,-0.4f, 0.4f * 1.732f, 0.0f,0.0f, -0.0f * 1.732f, 0.0f,0.8f, -0.0f * 1.732f, 0.0f,0.4f, 0.4f * 1.732f, 0.0f, };

?

本例繪制

?

public void DrawScene(GL10 gl) {super.DrawScene(gl);ByteBuffer vbb= ByteBuffer.allocateDirect(vertexArray.length*4);vbb.order(ByteOrder.nativeOrder());FloatBuffer vertex = vbb.asFloatBuffer();vertex.put(vertexArray);vertex.position(0);gl.glLoadIdentity();gl.glTranslatef(0, 0, -4);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex);index++;index%=10;switch(index){case 0:case 1:case 2:gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 6);break;case 3:case 4:case 5:gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 6);break;case 6:case 7:case 8:case 9:gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 6);break;}gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}

?

這里index 的目的是為了延遲一下顯示(更好的做法是使用固定時間間隔)。前面說過GLSurfaceView 的渲染模式有兩種,一種是連續不斷的更新屏幕,另一種為on-demand ,只有在調用requestRender() 在更新屏幕。 缺省為RENDERMODE_CONTINUOUSLY 持續刷新屏幕。

OpenGLDemos 使用的是缺省的RENDERMODE_CONTINUOUSLY持續刷新屏幕 ,因此Activity的drawScene 會不斷的執行。本例中屏幕上順序以紅,綠,藍色顯示TRIANGLES, TRIANGLE_STRIP,TRIANGLE_FAN。

?完整代碼:

MainActivity.java

package com.example.gltest;import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer;import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.Window; import android.view.WindowManager;public class MainActivity extends Activityimplements IOpenGLDemo{float vertexArray[] = {-0.8f, -0.4f * 1.732f, 0.0f,-0.4f, 0.4f * 1.732f, 0.0f,0.0f, -0.4f * 1.732f, 0.0f,0.4f, 0.4f * 1.732f, 0.0f,};/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);mGLSurfaceView = new GLSurfaceView(this);mGLSurfaceView.setRenderer(new OpenGLRenderer(this));setContentView(mGLSurfaceView);}// public void DrawScene(GL10 gl) { // gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f); // // Clears the screen and depth buffer. // gl.glClear(GL10.GL_COLOR_BUFFER_BIT // | GL10.GL_DEPTH_BUFFER_BIT); // // }public void DrawScene(GL10 gl) {//super.DrawScene(gl); ByteBuffer vbb= ByteBuffer.allocateDirect(vertexArray.length*4);vbb.order(ByteOrder.nativeOrder());FloatBuffer vertex = vbb.asFloatBuffer();vertex.put(vertexArray);vertex.position(0);gl.glLoadIdentity();gl.glTranslatef(0, 0, -4);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex);int index = 0;index ++;index%=10;switch(index){case 0:case 1:case 2:gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 6);break;case 3:case 4:case 5:gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 6);break;case 6:case 7:case 8:case 9:gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 6);break;}gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}@Overrideprotected void onResume() {// Ideally a game should implement// onResume() and onPause()// to take appropriate action when the//activity looses focus super.onResume();mGLSurfaceView.onResume();}@Overrideprotected void onPause() {// Ideally a game should implement onResume()//and onPause()// to take appropriate action when the//activity looses focus super.onPause();mGLSurfaceView.onPause();}private GLSurfaceView mGLSurfaceView;}

后面的?OpenGLRenderer.java和??IOpenGLDemo.java一樣。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的Android OpenGL ES(十)绘制三角形Triangle .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。