您的位置:首页 > 移动开发 > Android开发

学习android的opengl es

2013-07-24 17:29 316 查看
创建一个GLSurfaceView,GLSurfaceView继承自SurfaceView,同时实现Callback,

定义一个内部类RenderRunnable 实现 Runnable,也就是其中运行了一个新开的线程

定义一个接口(非必须),实现Renderer,包括 init()方法、resize(w,h)方法、render()方法

其中render方法作用是渲染一帧

这个线程用来干嘛?

1. 初始化EGL,获取egl,获取eglDisplay,egl初始化,配置eglConfig,创建eglContext,创建eglSurface

配置eglConfig的时候主要是使用一个int数组,按这样的顺序排列:{设置项1, 值1,设置项2, 值2,设置项3, 值3,... , EGL10.EGL_NONE}

创建eglSurface的时候,需要传入eglDisplay,eglConfig还有surfaceView的Holder

2. 初始化renderer,调动renderer的resize方法,将surface的宽高传入

3. 当surfaceChanged被调用的时候,检验surface是否重新调整了宽高,如果调整了,就更新surface的宽高,然后发送一个resize事件到renderRunable当中,进行异步调节。

4. 创建一个TriangleRenderer实现Renderer接口,在其中通过static块加载triangle.so文件,写三个native方法,对应Renderer接口。

5.下面是NDK部分:

platform_android.h当中引入triangle.h文件,extern "C"导出三个ndk方法:

在triangle.h中使用c语言实现以下三个方法:init()方法、resize(w,h)方法、render()方法

init()方法:

[1]设置背景颜色为指定的RGBA

[2]启动顶点数组的特性

resize(w,h)方法:

[1]更改视口大小为w,h

[2]计算ratio = w / h宽高比,调用透视投影,glFrustumf(-ratio, ratio, -1, 1, -1, 7)

render() 方法:

[1]设置为模型视图矩阵

[2]重置为单位矩阵

[3]给顶点数组当中的三角形上色

这篇文章不错:

[转载]从零开始学习OpenGL ES之二 – 简单绘图概述

http://bbs.ityran.com/article-5-1.html

GL学习笔记(2) - 终于搞明白gluPerspective和gluLookAt的关系了(zz)
http://cowboy.1988.blog.163.com/blog/static/751057982010101574732212/
再议gluPerspective和gluLookAt的关系
http://blog.csdn.net/wu4long/article/details/6126408
我可以使用 Android NDK glu 吗
http://efreedom.com/Question/1-7589563/Can-Use-Glu-Android-NDK
gluPerspective & gluLookAt Implementation in Android NDK
http://www.cnblogs.com/open-coder/archive/2012/12/24/2831608.html
GL_PROJECTION和GL_MODELVIEW的作用
http://blog.csdn.net/eit520/article/details/7629023
glMatrixMode
http://blog.csdn.net/zhanglongit/article/details/7525918
OpenGL 入门纪录--2 .透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法

http://hi.baidu.com/zhujianzhai/item/56ded397cf878237336eebeb
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: