博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android OpenGL ES(十)绘制三角形Triangle .
阅读量:6438 次
发布时间:2019-06-23

本文共 4909 字,大约阅读时间需要 16 分钟。

三角形为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 Activity       implements 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. */        @Override        public 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);                         }        @Override        protected void onResume() {            // Ideally a game should implement            // onResume() and onPause()            // to take appropriate action when the            //activity looses focus            super.onResume();            mGLSurfaceView.onResume();        }             @Override        protected 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一样。

转载地址:http://upzwo.baihongyu.com/

你可能感兴趣的文章
虚拟机安装CentOS
查看>>
Idea里面老版本MapReduce设置FileInputFormat参数格式变化
查看>>
在 win10 环境下,设置自己写的 程序 开机自动 启动的方法
查看>>
Unity3d游戏开发之-单例设计模式-多线程一
查看>>
通过jquery定位元素
查看>>
Tooltip表单验证的注册表单
查看>>
UWP开发中两种网络图片缓存方法
查看>>
超8千Star,火遍Github的Python反直觉案例集!
查看>>
【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?...
查看>>
全球首家!阿里云获GNTC2018 网络创新大奖 成唯一获奖云服务商
查看>>
Python简单HttpServer
查看>>
Java LinkedList工作原理及实现
查看>>
负载均衡SLB的基本使用
查看>>
Centos 7 x86 安装JDK
查看>>
微信小程序的组件用法与传统HTML5标签的区别
查看>>
Hangfire 使用笔记
查看>>
(C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标?
查看>>
教你彻底学会c语言基础——文件操作
查看>>
如何使用免费控件将Word表格中的数据导入到Excel中
查看>>
seafile服务器配置
查看>>