学习android的opengl es

本文介绍了如何在Android中使用OpenGL ES进行图形渲染。首先,创建GLSurfaceView并实现Callback,接着定义一个内部类作为渲染线程。然后,初始化EGL环境,设置配置并创建上下文。内容涵盖配置eglConfig、创建eglSurface、调用renderer的resize方法以及在NDK中实现init、resize和render方法。此外,文章还讨论了gluPerspective和gluLookAt的关系,以及OpenGL ES的相关函数和矩阵操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


创建一个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.youkuaiyun.com/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.youkuaiyun.com/eit520/article/details/7629023


 glMatrixMode
http://blog.youkuaiyun.com/zhanglongit/article/details/7525918


OpenGL 入门纪录--2 .透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法

http://hi.baidu.com/zhujianzhai/item/56ded397cf878237336eebeb








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值