Android的GLSurfaceView测试源码
来源:互联网 发布:数据新闻比赛官网 编辑:程序博客网 时间:2024/05/19 06:51
public class MainActivity extends Activity {private GLSurfaceView mGLView; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mGLView = new DemoGLSurfaceView(this); setContentView(mGLView); } public void onPause(){ super.onPause(); mGLView.onPause(); } public void onResume(){ super.onResume(); mGLView.onResume(); } protected void onDestroy() {super.onDestroy();mGLView.destroyDrawingCache();}}class DemoGLSurfaceView extends GLSurfaceView{ DemoRenderer mRenderer; public DemoGLSurfaceView(Context context) { super(context); //为了可以激活log和错误检查,帮助调试3D应用,需要调用setDebugFlags()。 //this.setDebugFlags(DEBUG_CHECK_GL_ERROR|DEBUG_LOG_GL_CALLS); mRenderer = new DemoRenderer(); this.setRenderer(mRenderer); } public boolean onTouchEvent(final MotionEvent event){ //由于DemoRenderer对象运行在另一个线程中,这里采用跨线程的机制进行处理。使用queueEvent方法 //当然也可以使用其他像Synchronized来进行UI线程和渲染线程进行通信。 this.queueEvent(new Runnable() { @Override public void run() { mRenderer.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f); } }); return true; } } class DemoRenderer implements Renderer {private float mRed;private float mGreen;private float mBlue;//三角形的三个顶点private FloatBuffer mTriangleBuffer;private float[] mTriangleArray = {0f,1f,0f,-1f,-1f,0f,1f,-1f,0f};//正方形的四个顶点private FloatBuffer quateBuffer ;private float[] mQuateArray = {-1f, -1f, 0f,1f, -1f, 0f,-1f, 1f, 0f,1f, 1f, 0f,};private FloatBuffer mColorBuffer;private float[] mColorArray={1f,0f,0f,1f, //红0f,1f,0f,1f, //绿0f,0f,1f,1f //蓝};public void setColor(float r, float g, float b) {this.mRed = r;this.mGreen = g;this.mBlue = b;}@Overridepublic void onDrawFrame(GL10 gl) {gl.glClearColor(mRed, mGreen, mBlue, 1.0f);gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);//使用数组作为颜色gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);//绘制三角形gl.glLoadIdentity();gl.glTranslatef(-1.5f, 0.0f, -6.0f);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mTriangleBuffer);gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);//gl.glDisableClientState(GL10.GL_COLOR_ARRAY);gl.glFinish();//绘制正方形gl.glLoadIdentity();gl.glTranslatef(1.5f, 0.0f, -6.0f);gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, quateBuffer);gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);gl.glFinish();}@Overridepublic void onSurfaceChanged(GL10 gl, int w, int h) {gl.glViewport(0, 0, w, h);float ratio = (float) w / h;gl.glMatrixMode(GL10.GL_PROJECTION);gl.glLoadIdentity();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(1.0f, 1.0f, 1.0f, 0f);gl.glClearDepthf(1.0f);gl.glEnable(GL10.GL_DEPTH_TEST);gl.glDepthFunc(GL10.GL_LEQUAL);gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glEnableClientState(GL10.GL_COLOR_ARRAY);mTriangleBuffer = floatToBuffer(mTriangleArray);mColorBuffer = floatToBuffer(mColorArray);quateBuffer = floatToBuffer(mQuateArray);}private static FloatBuffer floatToBuffer(float[] a){//先初始化buffer,数组的长度*4,因为一个float占4个字节ByteBuffer mbb = ByteBuffer.allocateDirect(a.length*4);//数组排序用nativeOrdermbb.order(ByteOrder.nativeOrder());FloatBuffer mBuffer = mbb.asFloatBuffer();mBuffer.put(a);mBuffer.position(0);return mBuffer;}}
0 0
- Android的GLSurfaceView测试源码
- Android 的 GLSurfaceView
- Android只GLSurfaceView画立方体测试代码
- Android-代替GLSurfaceView的GLTextureView
- Android GLSurfaceView
- Android GLSurfaceView
- Android GLSurfaceView
- android view,surfaceview,glsurfaceview的区别
- 基于Android的OpenGL—使用GLSurfaceView
- android中view surfaceView GLSurfaceView的区别
- Android之GLSurfaceView立方体图片纹理测试代码
- android.opengl.GLSurfaceView
- android.opengl.GLSurfaceView概述
- android.opengl.GLSurfaceView概述
- android.opengl.GLSurfaceView 概述
- android.opengl.GLSurfaceView
- Android GLSurfaceView.Renderer
- Android OpenGL ES->GLSurfaceView
- Zeroc ice java eclipse slice2java
- Eclipse启动参数解决占用CPU 100%,必须“立即结束”的问题
- 服务器数据库恢复/服务器重装系统/数据恢复注意事项
- Python 入门
- wsdl规则介绍
- Android的GLSurfaceView测试源码
- 分布式一致性Paxos算法学习笔记(二):算法详解
- Python 网易云音乐 MV 下载
- Java中Properties类的使用
- Pandas DataFrame 日常的操作与发现
- wsdl
- yii2框架-yii2的操作action(十)
- TextView字体跑马效果
- LeetCode第29题之Divide Two Integers