《OpenGL ES应用开发实践指南:Android卷》—— 1.2 创建第一个程序

1.2 创建第一个程序

我们已经安装并配置了工具,现在来创建第一个OpenGL程序。这个程序非常简单:它要做的只是初始化OpenGL并不停地清空屏幕;要得到一个可以实际做点什么的OpenGL程序,这是我们需要的最少的内容。
Joe 问:为什么要不停地清空屏幕
如果已经在每一帧的屏幕上都绘制了内容,清空屏幕好像是浪费的,那为什么还要这样做呢?
回到一切都用软件渲染的时代,清空屏幕总是一种浪费;开发者总是要假定所有东西都已经绘制好了,并能覆盖前一帧的内容,而不必清空它,这样就能达到优化的目的;可以节省清空屏幕的处理时间。有时,这种优化会导致一些游戏中常见的著名的“镜子大厅”(Hall Of Mirrors)效应,如Doom:它导致的视觉效果就像站在镜子大厅中间,旧的内容一遍又一遍重复出现。
这种优化不再有效了;最新的GPU以不同的方式工作,他们使用特殊的渲染技术,如果屏幕是干净的,他们能工作得更快。通过让GPU清空屏幕,可以节省帧拷贝浪费的时间。因为GPU的这种工作方式,清空屏幕可以帮助避免很多问题,如闪烁或者有物品没有绘制;保留旧的内容容易看到不期望或者不理想的结果。

如果你想查看源代码,这本书的所有源代码和相关数据都可以从本书的主页上下载。
新建项目
接下来按照下面的步骤新建项目:
1.在Eclipse菜单中选择“ File→New→Android Application Project”,当对话框弹出时,输入如下信息。
应用程序名(Application Name):
输入“First OpenGL Project”。
包名(Package Name):
包名是一个项目独一无二的标识符;按照惯例,要输入一个Java样式的包名,因此,让我们输入“com.firstopenglproject.android”。
最低SDK版本(Minimum SDK):
选择“API 10: Android 2.3.3 (Gingerbread)”;这是完全支持OpenGL ES 2.0的最低版本号。
2.其余选项使用默认值,那个表格看起来应该与图1-2类似。
3.单击“Next”按钮,不要勾选“Create custom launcher icon”,并且确认勾选了“Create Activity”;你可以为这个项目选择一个不同的目录。
4.再单击“Next”按钮就到了创建Activity的界面;要保证“Blank Activity”被选中了,再单击“Next”按钮,新的“Blank Activity”配置界面就出现了;设置Activity名字为“FirstOpenGLProjectActivity”;你的界面看上去应该与图1-3相似。
5.单击“Finish”按钮,继续并构建这个项目。

当单击“Finish”按钮后,Eclipse会工作一会儿,然后新项目就创建好了。

时间: 2024-11-01 02:16:35

《OpenGL ES应用开发实践指南:Android卷》—— 1.2 创建第一个程序的相关文章

《OpenGL ES应用开发实践指南:Android卷》—— 导读

前 言 Android刚刚经历了一个难以置信的增长周期,全世界的消费者手里有超过7.5亿台设备,并且每天都有一百多万台设备被激活.和Apple一样,在每一台Android手机和平板上也有个集中的市场,称为Google Play.随着这个市场被安装到每台Android设备上,对任何一个梦想着发布自己的游戏或者壁纸的人来说,这都是个前所未有的机会. 在Android上,与Apple的iOS及许多其他移动平台一样,开发者可以使用一个跨平台应用编程接口创建二维或者三维图形,这个接口称为OpenGL:Op

《OpenGL ES应用开发实践指南:Android卷》—— 1.1 安装工具

1.1 安装工具 下面是开发Android OpenGL所需要的基本工具列表: 一台运行Windows.OS X或者Linux的计算机 Java开发包(JDK) Android软件开发包(SDK) 集成开发环境(IDE) 一个手机.平板电脑或者支持OpenGL ES 2.0的模拟器 你需要的第一个工具是一台适合开发的个人计算机:任何较新的计算机都可以,它需要能运行Windows.OS X或者Linux.在这台计算机上,你需要安装Java开发包,可以从Oracle的网站下载:当前,Google指定

《OpenGL ES应用开发实践指南:Android卷》—— 1.4 创建Renderer类

1.4 创建Renderer类 现在要定义一个渲染器,以便我们开始清空屏幕.让我们快速浏览一下渲染器接口定义的方法: onSurfaceCreated(GL10 glUnused, EGLConfig config) 当Surface被创建的时候,GLSurfaceView会调用这个方法:这发生在应用程序第一次运行的时候,并且,当设备被唤醒或者用户从其他activity切换回来时,这个方法也可能会被调用.在实践中,这意味着,当应用程序运行时,本方法可能会被调用多次. onSurfaceChang

《OpenGL ES应用开发实践指南:Android卷》—— 3.4 做最后的拼接

3.4 做最后的拼接 我们在前两章中用了很大篇幅为这个应用打下了很好的基础:我们学习了如何使用属性数组定义一个物体的结构,也学习了如何创建着色器.加载并编译它们,以及把它们链接起来形成一个OpenGL的程序. 现在是时候在这个基础上开始构建并把它们拼接起来了.在下面的几个步骤里,我们就要把这些部分拼在一起,并准备好把第一个版本的空气曲棍球桌子画到屏幕上. 3.4.1 验证OpenGL程序的对象 在开始使用OpenGL的程序之前,我们首先应该验证一下它,看看这个程序对于当前的OpenGL状态是不是

《OpenGL ES应用开发实践指南:Android卷》—— 1.3 初始化OpenGL

1.3 初始化OpenGL 下一步就是使用一个特殊的类GLSurfaceView初始化OpenGL.GLSurfaceView会处理OpenGL初始化过程中比较基本的操作,如配置显示设备(display)以及在后台线程中渲染:渲染是在显示设备中一个称为"surface"的特定区域完成的,有时也称为视口(viewport).GLSurfaceView类也使得处理标准Android Activity生命周期变得容易了:在Android里,任何Activity都可以创建(create)和销毁

《OpenGL ES应用开发实践指南:Android卷》—— 2.5 引入OpenGL管道

2.5 引入OpenGL管道 现在,我们已经定义了曲棍球桌子的结构,并且把这些数据复制到了OpenGL可以存取的本地内存:在把曲棍球桌子画到屏幕上之前,它需要在OpenGL的管道(pipeline)中传递,这就需要使用称为着色器(shader)的子例程(见图2-6).这些着色器会告诉图形处理单元(GPU)如何绘制数据.有两种类型的着色器,在绘制任何内容到屏幕之前,需要定义它们.Joe问:什么是字节序字节序(Endianness)是描述一个硬件架构是如何组织位(bit)和字节(byte)的方式,它

《OpenGL ES应用开发实践指南:Android卷》—— 3.5 在屏幕上绘制

3.5 在屏幕上绘制 随着完成这些最后的连接,我们现在就准备好开始在屏幕上绘制了!我们将先画桌子,然后画分隔线和木槌. 3.5.1 绘制桌子 在onDrawFrame()结尾处,让我们在glClear()调用之后加入如下代码: 我们首先通过调用glUniform4f()更新着色器代码中的u_Color的值.与属性不同,uniform的分量没有默认值,因此,如果一个uniform在着色器中被定义为vec4类型,我们需要提供所有四个分量的值.我们想要以画一张白桌子作为开始,因此,我们把红色.绿色和蓝

《OpenGL ES应用开发实践指南:Android卷》—— 1.6 小结

1.6 小结 在本章,我们学习了如何创建一个新的OpenGL项目和清空屏幕.我们安装及配置了开发环境.创建了一个新项目.初始化了OpenGL.响应了Android Activity的生命周期,最后清空了屏幕!我们现在有一个基础了,后面的所有项目都能以此为基础来构建.休息片刻.在下面的两章里,我们会继续在这个基础上构建,学习如何为GPU编程,并加入更多特性.准备好了吗?让我们继续学习下一章.

《OpenGL ES应用开发实践指南:Android卷》—— 2.4 使数据可以被OpenGL存取

2.4 使数据可以被OpenGL存取 我们已经完成顶点的定义了,但是,在OpenGL可以存取它们之前,我们仍然需要完成另外一步.主要的问题是这些代码运行的环境与OpenGL运行的环境使用了不同的语言,我们需要理解如下两个主要的概念.1.当我们在模拟器或者设备上编译和运行Java代码的时候,它并不是直接运行在硬件上的:相反,它运行在一个特殊的环境上,即Dalvik虚拟机(Dalvik virtual machine):运行在虚拟机上的代码不能直接访问本地环境(native environment)