【Android】OpenGL ES for Android 教程1 - HelloWorld
本教程及后续教程全部参考或者转载于:OpenGL ES Tutorial for Android
本例相当于openGL的HelloWorld程序。
先贴代码,代码中的注释比较具体了。
主Activity类:
package seven.demo.openglhelloworld;import android.app.Activity; import android.opengl.GLSurfaceView; import android.os.Bundle; import android.view.Menu;public class OpenGLDemo extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);GLSurfaceView view = new GLSurfaceView(this);view.setRenderer(new OpenGLRenderer());setContentView(view);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_open_gldemo, menu);return true;} }
OpenGLRenderer类,实现Renderer接口:
package seven.demo.openglhelloworld;import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView.Renderer; import android.opengl.GLU;/*** 类描述: 功能详细描述:* * @author mengsifan* @date [2012-8-29]*/ public class OpenGLRenderer implements Renderer {/*** {@inheritDoc} 在这个方法中主要用来设置一些绘制时不常变化的参数,比如:背景色,是否打开 z-buffer等。*/@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {// 设置背景色 gl.glClearColor(.0f, .0f, .0f, .5f);/** 设置着色模式。参数mode可以是GL_SMOOTH(默认值)或GL_FLAT。* 采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。*/gl.glShadeModel(GL10.GL_SMOOTH);// Depth buffer setup.gl.glClearDepthf(1.0f);// Enables depth testing. gl.glEnable(GL10.GL_DEPTH_TEST);// The type of depth testing to do. gl.glDepthFunc(GL10.GL_LEQUAL);// Really nice perspective calculations. gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);}/*** {@inheritDoc} 如果设备支持屏幕横向和纵向切换,这个方法将发生在横向<->纵向互换时。此时可以重新设置绘制的纵横比率。*/@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {/** glViewport(GLint x,GLint y,GLsizei width,GLsizei height)为其函数原型。* X,Y————以像素为单位,指定了视口的左下角位置。* width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。*/gl.glViewport(0, 0, width, height);/** glMatrixMode设置当前矩阵模式 :* GL_MODELVIEW:对模型视景矩阵堆栈应用随后的矩阵操作。* GL_PROJECTION:对投影矩阵应用随后的矩阵操作。 * GL_TEXTURE:对纹理矩阵堆栈应用随后的矩阵操作。* 注意:与glLoadIdentity()一同使用。*/gl.glMatrixMode(GL10.GL_PROJECTION);// 重置当前指定的矩阵为单位矩阵 gl.glLoadIdentity();// 计算窗口宽高比例GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,100.0f);gl.glMatrixMode(GL10.GL_MODELVIEW);gl.glLoadIdentity();}/*** {@inheritDoc} 定义实际的绘图操作。*/@Overridepublic void onDrawFrame(GL10 gl) {/** 可以使用 "|"运算符组合不同的缓冲标志位,表明需要清除的缓冲。 例如glClear(GL_COLOR_BUFFER_BIT |* GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲。*/gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);}}
转载于:https://www.cnblogs.com/sifan/archive/2012/08/29/2661919.html
【Android】OpenGL ES for Android 教程1 - HelloWorld相关推荐
- OpenGl文章
Android OpenGL ES 简明开发教程
Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...
- android opengl流程,【Android OpenGL ES】Android Opengl ES创建流程
在android 1.0rc2 sdk中,提供了以下包支持Opengl ES 编程: 一.openglES包 android.opengl Class: GLDebugHelper:用于调试OpenG ...
- Android OpenGL ES 开发教程(20):颜色Color
OpenGL ES 支持的颜色格式为RGBA模式(红,绿,蓝,透明度).颜色的定义通常使用Hex格式0xFF00FF 或十进制格式(255,0,255), 在OpenGL 中却是使用0-1之间的浮点数 ...
- Android OpenGL ES 从入门到精通系统性学习教程
1 为什么要写这个教程 目前这个 OpenGL ES 极简教程的更新暂时告一段落,在此之前,很荣幸获得了阮一峰老师的推荐. 因为在工作中频繁使用 OpenGL ES 做一些特效.滤镜之类的效果,加上平 ...
- Android OpenGL ES 开发教程(16):Viewing和Modeling(MODELVIEW) 变换
Viewing和Modeling 变换关系紧密,对应到相机拍照为放置三角架和调整被拍物体位置及角度,通常将这两个变换使用一个modelview 变换矩阵来定义.对于同一个坐标变换,可以使用不同的方法来 ...
- Android OpenGL ES 2.0 屏幕坐标和3D世界坐标转换
Android OpenGL ES 2.0 屏幕坐标和3D世界坐标转换 查看全文 http://www.taodudu.cc/news/show-6705596.html 相关文章: word中如何加 ...
- Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 画出三棱锥
如今VR这么火,感觉有必要学学OpenGL.什么是OpenGL ES ,OpenGL ES (OpenGL for Embedded System ) 为适用于嵌入式系统的一个免费二维和三维图形库.O ...
- Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
最新文章
- 通达信四色谱四量图源码_翔博精选指标熊市专用优化(通达信公式 选股 源码 测试图)...
- android dimensions.xml,[Android Studio #2] 操作資源XML檔
- Django 应用开发(2)
- 25岁,在一个需要工作的周末……
- 第三方应用如何在SAP Kyma上进行服务注册
- Flutter开发之实现沉浸式状态栏的效果
- 查表法实现反正切_关于python实现CRC32的应用和总结
- Replace Data Value with Object(以对象取代数据值)
- 【动态规划】魔法石矿
- HDU 4027 Can you answer these queries?(线段树/区间不等更新)
- Leetcode每日一题:121.best-time-to-buy-and-sell-stock(买股票的最佳时机)
- 【MVC+MySQL+EntityFramework】查询性能优化笔记
- 数学建模之预测模型简要分析
- 毕业设计任务书----基于Android的学生考勤管理系统设计与实现
- 计算机汇编语言调试报告心得,汇编语言实习心得
- 利用Mac给台式机装Windows系统
- long 型应该加上 l或者L
- 什么是链路追踪?分布式系统如何实现链路追踪?
- java入门—第二节(1)(数据类型)
- 不借助编辑器自带的代码高亮工具(Syntaxhighlighte),生成完美格式的语法高亮代码
热门文章
- 我的Java开发之路
- js控制文本框仅仅能输入中文、英文、数字与指定特殊符号
- Impala与Hive的比较
- Hibernate 统计记录总数方法汇总
- c# WINFORM SOCKET编程-简单聊天程序(服务端)
- .NET Compact Framework 2.0 SP2 for Platform Builder (4.2, 5.0, 6.0)
- js循环解析html标签,riot.js教程【六】循环、HTML元素标签
- 在dos下用csc命令编译,提示“csc不是内部或外部命令,也不是可运行的程序... ”
- 关于MongoDB数据库的总结
- 转载:如何优雅的实现INotifyPropertyChanged接口