在android系统中有GlSurfaceView类来提供OpenGL ES开发。
下面说一下这个类的作用:
(1)在GlSurfaceView类中建立了OpenGL ES 和 View系统之间的联系;
(2)提供了可以使OpenGL ES 工作在 Activity的生命周期中的功能;
(3)更容易的选择合适的像素格式的帧缓存;
(4)创建和管理一个非主线程的单独的渲染线程,实现平滑的动画效果。
(5)提供方便的debugging工具类跟踪OpenGl API的调用,并检查错误。
通过调用类GlSurfaceView中的函数public void setRenderer(GLSurfaceView.Renderer renderer),可以建立一个OpenGL ES应用程序。
文章下面是关于Render类中函数的作用,以及函数内部具体实现的代码讲解
一: 在使用opengl前,需要对opengl作一些初始化的工作。对于一些在渲染循环过程中不经常改变的属性应该放在 渲染类Render中的函数onSurfaceCreated中:
(1)glShadeModel : 选择阴影模式 flat( GL10.GL_FLAT) 或者 smooth shading ( GL10.GL_SMOOTH )
GL10.GL_FLAT : 平面阴影模式,对点、直线、多边形采用一种颜色进行绘制,整个图元的颜色就是它任何一点的颜色。
GL10.GL_SMOOTH: 平滑阴影模式,用多种颜色进行绘制,每个顶点有单独的颜色,Opengl为顶点填充合适的颜色,使相邻的颜色值非常接近,然后向其他顶点平滑均匀插值过度颜色,出现过度的渐变效果。
OpenGL图元需要进行明暗处理,处理得模式可以为平面明暗模式或光滑(Gouraud着色)明暗模式。光滑明暗模式时,多边形各个内部点的颜色是根据各顶点指定的颜色来插值得到的,这意味着两个顶点之间的颜色是从一顶点的颜色渐变到另一顶点的颜色。对于平面明暗模式,整个图元区域的颜色就是最后一个顶点指定的颜色。但要注意,如果激活了光照,计算到的顶点颜色都是光照后的结果颜色,若光照关闭,计算到的颜色就是指定顶点时的当前颜色。
(2)glClearColor :设置清除屏幕时所用的颜色
(3)glClearDepth函数设置深度缓冲区的,它的含义就在OpenGL窗口绘制的图形深入到屏幕中的程度,深度的意义就是在三维空间中的z坐标的数值,z取0时表示在平面上,你就看不到窗口中的图形了,所以负值越小,越远离窗口平面向里,说明窗口中的图形离我们观察者的距离变远了;
(4)glEnable(GL_DEPTH_TEST): 用来开启更新深度缓冲区的功能,也就是,如果通过比较后深度值发生变化了,会进行更新深度缓冲区的操作
(5)glDepthFunc:设置更新深度缓存的条件。只有调用gl.glEnable(GL10.GL_DEPTH_TEST)函数,即启用深度缓存的情况下,这个函数才能使用。
函数的参数func,即指定什么条件下更新深度值:
GL_LESS:深度更小的情况下,更新深度缓存进行渲染。
GL_EQUAL:深度相同情况下,更新深度缓存进行渲染。
GL_LEQUAL:深度更小或者相同,更新深度缓存进行渲染。
(6)glHint:在OpenGL中,许多细节的实现算法有所不同。这样,可以调用函数glHint()对图像质量和绘制速度之间的权衡作一些控制,但并非所有的实现都采用它。
参数target指定控制行为,接受GL_FOG_HINT , GL_GENERATE_MIPMAP_HINT , GL_LINE_SMOOTH_HINT , GL_PERSPECTIVE_CORRECTION_HINT, 和 GL_POINT_SMOOTH_HINT等常量。
参数mode指定期望的行为。接受GL_FASTEST(即给出最有效的选择)、GL_NICEST(即给出最高质量的选择)、GL_DONT_CARE(即没有选择)等常量。
二: 如果你的手持设备支持横屏和竖屏的切换,在切换过程中,你需要调用函数onSurfaceChanged来设置新的比率。
(1)glMatrixMode:设置矩阵的类型,有三个模式 GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理.
投影矩阵:设置这个矩阵后就开始进行投影相关的操作,也就是将物体映射到2D空间上。设置投影矩阵并且重置用户坐标后,接下来就可以写和透视相关的操作,即创建视景体。例如glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相互作用,生成透视的效果;或者调用glOrtho创建正交平行矩阵,和当前的矩阵作用,生成平投影的效果。
模型矩阵:设置这个矩阵用于旋转、移动、缩放场景中的物体。
纹理矩阵:纹理也是一个矩阵,需要修改纹理的时候,需要通过glMatrixMode切换到纹理矩阵才能修改。
(2)glViewport:设置场景
glFrustum、gluPerspective、glOrtho函数只是负责使用什么样的视景体来截取图像,并不负责使用某种规则把图像呈现在屏幕上。
glViewport负责把视景体截取的图像按照怎样的高和宽显示到屏幕上。
(3)glLoadIdentity:重置当前指定的矩阵为单位矩阵,类似复位的操作。
注释: 纹理就是位图,图片上的纹理就是花纹或者图案。纹理映射将图片作为纹理贴在一个矩形上。
三:前面两个函数的功能为Opengl的操作进行铺垫,而函数onDrawFrame开始进行画图,显示效果
代码来自网站:http://insanitydesign.com/wp/projects/nehe-android-ports/
分享到:
相关推荐
package ljh.opengl;是对OpenglES的一些封装。 package ljh.game;是对一些游戏常用的代码的封装 都没写完! 最近改学IOS了 看看什么时候能补充完。
OpenGL ES2.0学习”这本书将引导读者全面掌握OpenGL ES 2.0在Android平台上的应用,从基础概念到高级技巧,涵盖3D图形编程的各个方面,对于想要进入移动游戏开发领域的开发者来说是一本宝贵的资源。
### Android开发学习笔记知识点梳理 #### 一、Android概述与架构 - **定义与发布**:Android是由Google在2007年11月5日宣布的基于Linux平台的开源手机操作系统。它不仅用于智能手机,还广泛应用于平板电脑、可穿戴...
本篇学习笔记主要涵盖了ArcGIS for Android的基础配置和核心组件MapVie的使用。 首先,配置ArcGIS for Android项目需要在`Project`级别的`build.gradle`文件中添加Esri的仓库,确保能获取到所需的库。接着,在`...
Android OpenGL ES学习笔记之绘制一个立方体-附件资源
【Android学习笔记】 Android是一种基于Linux内核的开源操作系统,主要应用于移动设备,如智能手机和平板电脑。这个“很好的android学习笔记”包含了作者在学习Android开发过程中积累的宝贵经验,旨在帮助初学者或...
根据提供的文件内容,这是一份详细的Android学习笔记,涵盖了从基础入门到高级特性的各个知识点。以下是从这些内容中提取的知识点: 1. Android入门基础: - 建立第一个App:介绍如何创建Android项目和执行程序。 ...
这篇学习笔记将深入探讨这两个概念及其在实际应用中的使用。 首先,Canvas可以理解为画布,它是Android系统提供的用于在屏幕上绘制图形的对象。在Android中,我们可以通过Canvas来绘制各种形状,如线条、矩形、圆、...
在Android系统相关学习笔记中,我们可以深入探讨这个广泛而复杂的移动操作系统的核心概念和技术。Android以其开源性和灵活性,吸引了大量的开发者和爱好者。以下是一些关键的知识点: 1. **Android架构**:Android...
【Android程序开发学习笔记(手电筒软件设计)】 Android是一种开放源代码的移动操作系统,由Google领导的Open Handset Alliance开发,旨在提供一个统一且先进的移动设备平台。它的历史可以追溯到2008年,当时首款...