openGL ES Android 三角形绘制
来源:互联网 发布:adobe acrobat x mac 编辑:程序博客网 时间:2024/04/30 01:15
1、先新建一个Android项目
2、建一个类 MySurfaceView
public class MySurfaceView extends GLSurfaceView { //只是一个载体 public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); } public MySurfaceView(Context context) { super(context); }}
3、建一个抽象类 MyAbstractRenderer
public abstract class MyAbstractRenderer implements Renderer { //表层创建 public void onSurfaceCreated(GL10 gl, EGLConfig arg1) { //设置清屏色(背景) gl.glClearColor(0, 0, 0, 1); //启用顶点缓冲区 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); } //表层size改变 public void onSurfaceChanged(GL10 gl, int width, int height) { //openGL基于状态机 /*单位矩阵 * [1,0,0,0] * [0,1,0,0] * [0,0,1,0] * [0,0,0,1] */ //视口 gl.glViewport(0, 0, width, height); //矩阵模式 //透视投影:有深度 (投影矩阵) //正投影:没有深度 gl.glMatrixMode(GL10.GL_PROJECTION);//(投影矩阵) //原则:在操作矩阵前先加载单位矩阵 然后才干别的事情 //将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作 gl.glLoadIdentity(); //平截头体 //左侧(宽高比),右侧(宽高比),下侧,上侧,近平面、远平面 float ratio=(float)width/(float)height; gl.glFrustumf(-ratio, ratio,-1f, 1f, 3, 7); } /* *绘图 * 在子线程运行 */ public void onDrawFrame(GL10 gl) { this.drawBefore(gl); //模型视图矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); //eyex,eyey,eyez 放置眼球的坐标 //centerx,centery,ceterz眼球的观察点 //upx,upy,upz 指定眼球向上的向量 GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0); this.draw(gl); } /* * 绘图 * 参数的基本设置 */ protected void drawBefore(GL10 gl) { //清除颜色缓冲区 gl.glClear(GL10.GL_COLOR_BUFFER_BIT); //设置绘图的颜色 gl.glColor4f(1f, 0, 0, 1f); } //子类实现绘图的方法 protected abstract void draw(GL10 gl);}
4、做一个工具类来实现数组转字节数组的方法
public class BufferUtil { public static ByteBuffer arr2ByteBuffer(float[] arr){ //分配字节缓冲区空间,存放顶点坐标 //float 为4个字节 ByteBuffer ibb=ByteBuffer.allocateDirect(arr.length*4); //设置顺序(本地数据) ibb.order(ByteOrder.nativeOrder()); //放置顶点坐标数组 FloatBuffer fbb=ibb.asFloatBuffer(); fbb.put(arr); //定位指针位置,从该位置开始读取顶点数据 ibb.position(0); return ibb; } public static ByteBuffer list2ByteBuffer(List<Float> list){ ByteBuffer ibb=ByteBuffer.allocateDirect(list.size()*4); ibb.order(ByteOrder.nativeOrder()); FloatBuffer fbb=ibb.asFloatBuffer(); for (Float f : list) { fbb.put(f); } ibb.position(0); return ibb; }}
5、绘制三角形
public class MyTrianglesRenderer extends MyAbstractRenderer { /* * 绘制三角形 */ protected void draw(GL10 gl) { float [] dots={ 0,0.5f,0, -0.5f,-0.5f,0, 0.5f,-0.5f,0 }; ByteBuffer ibb=BufferUtil.arr2ByteBuffer(dots); //3:表示三维点(x,y,z) //type:GL10.GL_FLOAT 每个点是什么数据类型 //stride:0 跨度 //ibb ,顶点缓冲区 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, ibb); //画三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); }}
6、整合运行程序
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MySurfaceView view=new MySurfaceView(this); MyAbstractRenderer renderer=new MyTrianglesRenderer(); view.setRenderer(renderer); setContentView(view); }}
0 0
- openGL ES Android 三角形绘制
- android opengl es绘制三角形+纹理
- Android OpenGL ES 基础:绘制三角形
- Android OpenGL ES 2.0绘制简单三角形
- Android OpenGL ES(十):绘制三角形Triangle
- Android OpenGL ES 开发教程(11):绘制三角形Triangle
- Android OpenGL ES 开发教程(11):绘制三角形Triangle
- Android OpenGL ES 开发教程(11):绘制三角形Triangle
- Android OpenGL ES 开发教程(11):绘制三角形Triangle
- OpenGL ES(一)绘制三角形
- OpenGL ES学习001---绘制三角形
- android opengl es--三角形,四边形
- openGL ES Android 绘制点
- Android 中使用OpenGL ES进行2D开发(绘制第一个三角形)
- Android 中使用OpenGL ES进行2D开发(绘制第一个三角形番外篇)
- android 使用OPENGL ES绘制三角形(一) (顶点方法)
- Android Open GL ES - 绘制三角形
- android opengl es 三角形、正方形自动旋转
- Android 一键清理、内存清理功能实现
- 货币国际化
- 叫号系统排队系统挂号系统实现
- Qt按键键值 与 相关字符串 的映射表
- 设置为relay_log_info_repository = TABLE 后文件消失
- openGL ES Android 三角形绘制
- iPhone开发学习笔记
- Min Stack
- 线程中的状态转换和Thread 中的sleep()方法
- ios中为什么block用copy属性
- 有道词典Demo(WebView)
- Linux查看硬件配置命令
- Poj 1125 Stockbroker Grapevine(floyd小变形)
- Uva-11624(Fire!)——BFS