当前位置:首页 » 编程软件 » opengles30编程指南

opengles30编程指南

发布时间: 2022-05-26 18:21:03

㈠ openGL 2.0该怎么安装

完成工具的安装以后,继续在Eclipse中创建一个新的Android项目。项目名称虽然不重要,但是该节将与主要活动有关,因此应认真学习掌握。首先看一段代码:/**新建一个GLSurfaceView对象*/;GLSurfaceView是一个特殊的视图,它为我们管理OpenGL表面并将其绘制到Android视图系统中。它还添加许多可以简化OpenGL使用的功能,包括但并不局限于:它为OpenGL提供一个专用的渲染线程,使主线程得以继续。它支持连续或按需渲染,维护屏幕设置以及OpenGL和底层窗口系统之间的接口。代码如下:@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);mGLSurfaceView=newGLSurfaceView(this);//检测系统是否支持OpenGLES2.=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);=activityManager.getDeviceConfigurationInfo();finalbooleansupportsEs2=configurationInfo.reqGlEsVersion>=0x20000;if(supportsEs2){mGLSurfaceView.setEGLContextClientVersion(2);mGLSurfaceView.setRenderer(newLessonOneRenderer());}else{return;}setContentView(mGLSurfaceView);}在onCreate()方法里面主要是创建OpenGLES2.0上下文以及做一些初始化工作。在onCreate()中,调用超类之后的第一件事情就是创建GLSurfaceView。然后确定系统是否支持OpenGLES2.0。因此,我们需要一个可以与全局系统状态相交互的ActivityManager实例,以及使用这个实例来得到设备配置信息,该信息将通知我们设备是否支持OpenGLES2.0。一旦确定设备是否支持OpenGLES2.0后,就会通知表面视图需要一个与OpenGLES2.0相兼容的视图,然后传递一个自定义渲染。这个渲染将在任何需要调整表面或者绘制一个新的帧的时候被系统调用。我们还通过传递一个不同的渲染来支持OpenGLEs1.x,尽管可能由于APIs的不同,导致我们需要编写不同的代码,但在这一节中,我们将只关注OpenGLES2.0。最后,我们为GLSurfaceView设置内容视图,它通知Android活动内容应该填补OpenGL表面,代码如下:@OverrideprotectedvoidonResume(){super.onResume();mGLSurfaceView.onResume();}@OverrideprotectedvoidonPause(){super.onPause();mGLSurfaceView.onPause();}GLSurfaceView要求我们在任何父Activity的onResume()和onPause()方法被调用的时候调用onResume()和onPause()方法。

㈡ 如何搭建开发OpenGLES的开发环境,包括软件和硬件平台

首先,下载网盘里面的MDK 4.72a(或者以上版本)并安装,最好先不要用5.0的版本。别忘了和谐:)

之后,下载Jlink驱动并安装。

之后,下载附件中的nRF51822的SDK(两周前发布的5.0版本)并安装。有的坛友反映winxp安装不上,这个原因可能是没有装Microsoft .NET Framework。安装之后到“\ARM\Device\Nordic\”下面就能看到SDK的所有源码了。

今天就写了这么多,很多坛友还没收到开发板。想要抢跑的坛友请看附件里的《上手指南》,这是开发板到手后必看的文档!里面把下一颗要讲的都写得很清楚了

㈢ OpenGLes2.0 什么是Pbuffer

OpenGLES让崩溃东西Andorid手机做三D用我记些笔记享吧: Android OpenGL ES简介 二00一一-陆-三 Android系统使用OpenGL标准接口支持三D图形功能android 三D图形系统java框架本代码两部 本代码主要实现OpenGL接口库Java框架层javax.microedition.khronos.openglesjava标准OpenGL包 android.opengl包提供OpenGL系统Android GUI系统间联系 Android本代码位于frameworks/base/opengl, JNI代码位于frameworks/base/core/com_google_android_gles_jni_GLImpl.cppframeworks/base/core/com_google_android_gles_jni_EGLImpl.cpp java类位于opengl/java/javax/microedition/khronos 本测试代码位于frameworks/base/opengl/tests包括angeles、fillrate等一四测试代码些代码都通终端进行本调用测试(模拟器使用adb shell) OpenGL ES 一.x 固定管线操作支持glVertexPointer()等函数支持GLSL文件ndkGLES目录库文件libGLESv一_CM.so OpenGL ES 二.x 编程管线操作兼容一.x支持固定管线操作例glVertexPointer()等函数支持GLSL(必须用编程)文件ndkGLES二目录库文件libGLESv二.so OpenGL ES习 二0一一-陆-三0 OpenGL定义自数据类型应该坚持使用些OpenGL数据类型保证移植性效率 OpenGL ES 目前支持陆四位数据类型 OpenGL ES 支持三边形 OpenGL ES 支持gl函数glu库都支持 OpenGL ES OpenGL删除功能: 一. glBegin/glEnd 二. glArrayElement 三. 显示列表 四. 求值器 5. 索引色模式 陆. 自定义裁剪平面 漆. glRect 吧. 图像处理(般显卡没FireGL/Quadro显卡) 9. 反馈缓冲 一0. 选择缓冲 一一. 累积缓冲 一二. 边界标志 一三. glPolygonMode 一四. GL_QUADS,GL_QUAD_STRIP,GL_POLYGON 一5. glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib 一陆. TEXTURE_一D、TEXTURE_三D、TEXTURE_RECT、TEXTURE_CUBE_MAP 一漆. GL_COMBINE 一吧. 自纹理坐标 一9. 纹理边界 二0. GL_CLAMP、GL_CLAMP_TO_BORDER 二一. 消失纹理代表 二二. 纹理LOD限定 二三. 纹理偏限定 二四. 纹理自压缩解压缩 二5. glDrawPixels,glPixelTransfer,glPixelZoom 二陆. glReadBuffer,glDrawBuffer,glCopyPixels OpenGL ES 二.0 二0一一-一0-9 二.0一.一兼容 - 二.0使用文件ndkinclude目录GLES二目录gl二.h,gl二ext.h,gl二platform.h一.一使用GLES目录 - 二.0使用库文件ndklib目录libGLESv二.so一.一使用libGLESv一_CM.so - 二.0取消一.一函数例glMatrixModelglLoadIdentity等 OpenGL着色语言(GLSL――OpenGL Shading Language) - 使用二.0必须语言一.一函数都取消 san-angeles NDK OpenGL ES 一.一例程序 二0一二-三-吧 San Angeles查维基网络虚构未概念城市位于南加州电影现源自Los AngelesSan Diego. 该程序演示效观察宏伟城市面镜面建筑倒影城市飞船飞前5、陆观察点且镜每观察点停移 例用NDK(C++)调用OpenGL ES 一.一绘制San Angeles城市基本全部使用NDKJava程序一 用vc二005演示目通跟踪代码解些细节: - jni所.h文件及demo.c,app-win三二.c复制放专门目录改造用OpenGLES(或者干脆删除段绘制代码保证编译通) 首先析Java代码 - DemoActivity.java唯Java文件主要需要列四jni接口: - private static native void nativeInit(); // 初始化 - private static native void nativeResize(int w, int h); - private static native void nativeRender(); // 绘制一帧 - private static native void nativeDone(); 其析C++代码 app-android.c - 首先调用importGLInit()态导入OpenGL库 - 其调用 appInit()内存建立平台关三D象集合建立用数组用类似画圆拔高式产诸三角形 - 每钟周期调用appRender()细节: - prepareFrame(width, height); // 准备OpenGL ES绘制框架其实清空颜色深度缓冲重置投影模型矩阵 - camTrack(); // 算前钟周期镜位置、朝向及焦距等调用gluLookAt实现 - configureLightAndMaterial(); // 设置光源材质 - drawModels(-一); // 先绘制倒影(其实所模型z轴倒画) - 第循环画精致物体 - 第二循环画运物体 - drawGroundPlane(); // 再绘制镜般面绘制前取消光照打混合绘制绘制原状态 - drawModels(一); // 再绘制所模型 - drawFadeQuad(); // 绘制淡框用融合式画遮住整视口二D框融合系数间相

㈣ 如何学习一种开发框架

我接触的许多程序员中,绝大多数都是知其然不知其所以然,做了AS好几年的,甚至连AVM是什么都不知道的太多了。许多程序员把快速开发出成品作为是工作的唯一目标,认为研究底层知识和周边技术是浪费时间。很多东西他们不是不能知道,而是不想知道。

更有甚者,学会了 gotoAndPlay 就敢说熟悉 Flash,会敲 ls 就敢说精通Linux。前几天有朋友发给我他膜拜了一日的逆天简历,上面洋洋洒洒写着汇编、C/C++、Linux网络编程、JAVA EE、Perl、Bash、Python、Windows驱动开发、单片机开发、HTML、CSS3、JavaScript、PHP、cocos2d-x、iOS开发、安卓开发……而且所有的项目的级别都是 精通!

我看完简历和朋友说:这位前后端桌面嵌入式系统驱动网页手机开发通吃的全栈神人10年里跳槽8次,从没在一个公司干满过2年,你敢用么?

======上面废话,不看也罢。

刚巧我也是从AS3转到了cocos2d-x,说说我的经验吧。

一、cocos2d-x 部分

1.1 技术选型

从第三个手游开始,我实在被Adobe的ANE和国内的小平台折腾得没了脾气,决定转到cocos2d-x。在选择哪种语言绑定的时候纠结了很久,最后力排众议选了 lua:Cocos2dx+lua合适还是Cocos2dx+js合适? cocos2d-x 2.x 的lua绑定做得并不好,于是我选择了 quick-cocos2d-x (后来,quick被触控收购)。

1.2 学习 C++

C++ Primer 中文版(第 5 版) (豆瓣) 是不错的入门书籍,建议看第五版,我写过一篇 C++Primer 第4版和第5版比较 。学习期间建议画一些思维导图帮助理解和整理思路。例如这个(不完整):

1.3 学习DEMO和熟悉开发平台

编译 cocos2d-x 自带的 TestCPP 项目,全部跑一遍。熟悉 cocos2d-x API 的用法。记得用doxygen 生成文档,建议每个API的功能都浏览一遍。

有的同学可能更喜欢直接看源码,那当然更好。不过文档有一个好处就是能更直观地显示继承关系。

在学习DEMO的过程中,你必须熟悉自己开发平台的IDE,例如Windows上必须熟悉 Visual Studio,而OS X上必须熟悉xcode,Linux平台上就熟悉Eclipse+CDT吧。

注意,quick-cocos2d-x 是不支持Linux开发平台的。

2014-05-17更新:quick已经使用QT重写了player部分,但依然不支持Liunx平台。

1.4 了解引擎的文件夹结构

基于 cocos2d-x 源码生成的文档并不怎么详细,许多功能必须看源码。但这个阶段,我不建议纠结源码太深,倒是可以纠结一下 cocos2d-x 的文件夹结构,看看各个类放在什么地方,找一找常见的哪些宏和常量以及枚举定义在什么地方,这花不了多少时间,但能让你对cocos2d-x有更深刻的了解,同时给你很强的成就感。这种成就感冲淡了你面对大量源码时候的无力感,让你能够继续前行。

下面是我的分析:

1.5 重复上面的第3步:再次学习DEMO

这时候看DEMO可能会轻松不少,但是你会有更多的问题去纠结。例如多分辨率支持?例如坐标系统?例如绘图功能?例如层级管理系统?例如事件传递系统?等等等等……这时候可以去Google(注意不要用百毒和其他搜索引擎)找文档看了。我推荐一些我看过的不错的文档和博客:

http://www.ityran.com/archives/4809
Cocos2d-x官方中文文档 v2.x
Cocos2D | iOS Development Tips & Tricks by BiOM
子龙山人 - 博客园
红孩儿的游戏编程之路
Ray Wenderlich
Cocos2d-x | Cross Platform Open Source 2D Game Engine
许多博客都是极好的。红孩儿(后来加入了触控)写了许多源码分析,每一句源码都加了注释。虽然我不太认同他这种吃力不讨好的方法,但对于新手来说确实是有很大的帮助。

另外在 Stack Overflow 你能找到绝大部分问题的答案。当然,许多问题是针对 cocos2d 而非 cocos2d-x 的,不过用法相同,照看不误。许多优秀的文章都是基于 cocos2d 的,所以,不要介意,可以先花半天时间熟悉 OC 的语法,能看懂即可。

暂时不要买中文书。我曾经花3天时间看完了 《Cocos2D-X游戏开发技术精解》 和 《cocos2d-x手机游戏开发–跨iOS、Android和沃Phone平台》,发现作者其实就是来赚稿费的。

忘了广告了,我的博客(cocos2d-x | zrong's Blog)也有一些cocos2d-x内容,欢迎来喷。

1.6. 熟悉工具集

现在你应该对周边工具感兴趣了。例如帧动画使用什么制作?BMFont使用什么制作?骨骼动画呢?plist文件怎么编辑?碎图用什么工具拼合?有些项目上,你有许多选择,也可能没得选。去Google吧,如果遇到选择上的问题,欢迎找我讨论。

二、 quick-cocos2d-x 部分

2.1 现在就到lua时间了

请认真读完 《Lua程序设计(第2版) 》 第一、二、三部分。第四部分可暂时不读。

1.2 熟悉 quick-cocos2d-x 的文件夹结构

相信有了上面 cocos2d-x 的基础,这个应该不难理解。

1.3 跑完 quick-cocos2d-x 自带的所有sample

在这期间,熟悉 framework 中的所有封装。可以参考 quick网站 和 quick wiki 。

1.4 学习导出API给Lua使用

导出 C/C++ API 给 Lua 使用

三、学习 OpenGL ES

熟悉Lua部分之后,作为一个有志于成为程序员的码农,依然要回到C/C++来,这里才是 cocos2d-x 的本质。

cocos2d-x 使用 OpenGL ES 进行渲染的,如果要对 cocos2d-x 的渲染层进行任何形式的扩展,你完全避不开 OpenGL ES。

既然逃不开,那就对TA说,请张开双腿,我要上。

3.1 阅读 OpenGL ES 2.0 Programming Guide

下面是这本书的官网,目前已经出了 OpenGL ES 3.0 版本,cocos2d-x 使用的是2.0。
http://www.opengles-book.com/es2/index.html

这本书写得浅显易懂,非常适合新手。有位网友花3个月时间翻译了中文版,但还是建议你不要看了。

这里是 OpenGL ES 的 官方文档 和 API中文翻译 。

当然,你也可以买那本着名的 OpenGL 红宝书 《OpenGL编程指南(原书第7版)》 来看,不过 OpenGL ES 相对与 OpenGL 来说还是有一些不同的,你要知道如何区分这些不同。

3.2 尝试理解 cocos2d-x 的渲染部分架构

相关的类我就不列出了,我正在酝酿一个这方面的系列文章准备发到博客上。如果写完了,我会在这里更新。

3.3 自己写一些滤镜、绘图功能的扩展

例如这个: cocos2d-x-filters

四、回归项目

到了这里,你可以开始你的项目了。虽然源码还没有读完,但相信整个架构都能理解了。在做项目的过程中,再去一点点读源码是比较快捷和我能够接受的方法,否则就太枯燥了。

你可以还需要选择一下cocos2d-x相关的工具。你可能听说过 CCB(cocosBuilder)和CCS(cocoStudio),尝试了解她们,再决定是否使用她们。

你已经有了AS3的基础,这样许多前端的概念和经验已经很丰富了。这些经验在cocos2d-x中同样适用。但是要注意的是,cocos2d-x不是AS3,不要试图用AS3的方法去使用cocos2d-x。

有位码农在从C#转到AS3的时候向我抱怨:为什么Flash Builder没有Visual Studio的这个功能那个功能?
然后这位码农在从AS3转到Sublime Text(用于Lua编辑)的时候向我抱怨,为什么Sublime Text没有Flash Builder的这个功能那个功能?
上面是个笑话。

同时,为了解决一些cocos2d-x没有提供的功能,你必须去学习相关的知识。例如这个:在 cocos2d-x 中使用 libcurl 实现上传文件功能(附quick-cocos2d-x封装)。不过你现在已经有了基础,学习这些不是难事。

在有时间的时候,可认真读一下上面提到的《Lua程序设计(第2版) 》第四部分,了解Lua和C语言通信的方式,顺便看看cocos2d-x里面是怎么实现的。

另外,一些你需要的引擎中没有的功能,也可以顺手实现了开源出来(例如这个:一个LuaSocket封装),说不定你需要的东西正好是别人也需要的。

五、熟悉发布平台

既然是做手游,Android和iOS平台是逃不掉了。

你要熟悉Android和iOS平台的特点,熟悉JAVA在Android上的应用,熟悉Objective-C在iOS上的应用,熟悉Eclipse ADT和XCode(上面应该已经熟悉过了)。

你还要熟悉Google Play和AppStore的发布流程以及方针、政策,内购的接入、SDK的嵌入。

你要学习和各个接入平台的程序员、商务、前台小妹打交道(因为经常会找不到你要找的真正的负责该SDK的技术人员),你要能忍受国内小平台糟糕的文档、代码规范和逆天的编程方法。

终、没有终点

上面说的并不完整,应该遗漏了不少东西,但我只能说这么多了。因为我的经验也止于此。

祝你成功!
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

㈤ opengl 4.3 和 OPENGL ES 3.0差别大么,我有OPENGL 4.3的基础可以不修改地用于OPENGLES3.0 的编程么谢谢

要改,改动不大

㈥ opengles shader 可以用for吗

Shader可以说是现代OpenGL的灵魂。
这牵涉到一个历史遗留问题:GL 1.x中只有固定管线,渲染效果是固定的,而在GL
2.0中增加了可编程管线,想要什么渲染效果都可以自己往加。GL
3.0+就废弃了固定管线,也就是说不写Shader是不推荐的。不写Shader的固定管线时代早就在十多年前过去了。
回到GLES中,GLES 1.0是固定管线(为了某些原因),不需要也不能写Shader;GLES 2.0+是可编程管线,必须写Shader。
建议题主少走点弯路,直接上可编程管线。虽然比固定管线稍微要多做点工作,但长远来看是好的,能做出更炫的效果并充分利用GPU。
退固定管线保平安。

㈦ 如何在Android上使用OpenGL ES 2.0绘制点

OpenGLES是一个让人崩溃的东西。在Andorid手机上做3D还就得用它。把我记的一些笔记分享在这里吧:AndroidOpenGLES简介20011-6-3Android系统使用OpenGL的标准接口来支持3D图形功能,android3D图形系统也分为java框架和本地代码两部分。本地代码主要实现的OpenGL接口的库,在Java框架层,javax.microedition.khronos.opengles是java标准的OpenGL包,android.opengl包提供了OpenGL系统和AndroidGUI系统之间的联系。Android的本地代码位于frameworks/base/opengl下,JNI代码位于frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp和frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp,java类位于opengl/java/javax/microedition/khronos下本地测试代码位于frameworks/base/opengl/tests。包括angeles、fillrate等14个测试代码,这些代码都可以通过终端进行本地调用测试(模拟器中使用adbshell)。OpenGLES1.x固定管线操作,支持glVertexPointer()等函数,不支持GLSL。头文件在ndk的GLES目录下,库文件是libGLESv1_CM.so。OpenGLES2.x可编程管线操作,不兼容1.x,不支持固定管线操作,例如glVertexPointer()等函数。支持GLSL(还必须用这个来编程)。头文件在ndk的GLES2目录下,库文件是libGLESv2.so。OpenGLES学习2011-6-30OpenGL定义了自己的数据类型。应该坚持使用这些OpenGL的数据类型,从而保证可移植性和效率。OpenGLES目前不支持64位数据类型。OpenGLES只支持三边形。OpenGLES只支持gl开头的函数,glu库都不支持。OpenGLES从OpenGL中删除的功能:1.glBegin/glEnd2.glArrayElement3.显示列表4.求值器5.索引色模式6.自定义裁剪平面7.glRect8.图像处理(这个一般显卡也没有,FireGL/Quadro显卡有)9.反馈缓冲10.选择缓冲11.累积缓冲12.边界标志13.glPolygonMode14.GL_QUADS,GL_QUAD_STRIP,GL_POLYGON15.glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib16.TEXTURE_1D、TEXTURE_3D、TEXTURE_RECT、TEXTURE_CUBE_MAP17.GL_COMBINE18.自动纹理坐标生成19.纹理边界20.GL_CLAMP、GL_CLAMP_TO_BORDER21.消失纹理代表22.纹理LOD限定23.纹理偏好限定24.纹理自动压缩、解压缩25.glDrawPixels,glPixelTransfer,glPixelZoom26.glReadBuffer,glDrawBuffer,glCopyPixelsOpenGLES2.02011-10-92.0和1.1不兼容。-2.0使用的头文件是ndk的include目录下的GLES2目录,有gl2.h,gl2ext.h,gl2platform.h,而1.1使用的是GLES目录。-2.0使用的库文件是ndk的lib目录下的libGLESv2.so,而1.1使用的是libGLESv1_CM.so。-2.0中取消了很多1.1函数,例如glMatrixModel和glLoadIdentity等。OpenGL着色语言(GLSL――OpenGLShadingLanguage)-使用2.0,必须学此语言。因为很多1.1的函数都被取消了。san-angelesNDKOpenGLES1.1的例子程序2012-3-8SanAngeles,查维基网络,是一个虚构的未来概念城市,位于南加州。常在电影中出现,来源自LosAngeles和SanDiego.该程序的演示效果是,观察一个宏伟的城市,地面是镜面有建筑倒影,城市中有飞船飞过。前后有5、6个观察点,而且镜头在每个观察点不停的移动。这个例子,用NDK(C++)调用OpenGLES1.1来绘制了SanAngeles这个城市。基本上全部使用了NDK,Java程序只有1个。用vc2005演示一下,目的通过跟踪代码了解一些细节。方法是:-将jni下所有的.h文件,以及demo.c,app-win32.c复制出来,放在一个专门的目录下,然后改造成用OpenGL的而不是ES的。(或者干脆删除大段的绘制代码,保证编译通过)首先分析Java代码-DemoActivity.java,这是唯一的Java文件,它主要需要下列4个jni的接口:-();//初始化-(intw,inth);-();//绘制1帧-();其次分析C++代码app-android.c-首先,调用了importGLInit(),动态导入OpenGL的库。-其次,调用了appInit(),在内存中建立了平台无关的3D对象集合。建立方法是用一个数组,用类似画圆拔高的方式产生诸多三角形。-然后,在每个时钟周期中调用appRender(),细节是:-prepareFrame(width,height);//准备OpenGLES绘制框架。其实就是清空颜色和深度缓冲,重置投影和模型矩阵。-camTrack();//算好在当前时钟周期,镜头的位置、朝向及焦距等。然后调用gluLookAt来实现。-configureLightAndMaterial();//设置光源和材质-drawModels(-1);//先绘制倒影(其实就是将所有模型z轴倒过来画)-第一个循环,是画精致的物体-第二个循环,是画运动的物体-drawGroundPlane();//再绘制镜子一般的地面。在绘制前取消光照,打开混合,然后绘制。绘制后还原状态。-drawModels(1);//再绘制所有模型-drawFadeQuad();//最后绘制淡出框,用融合的方式画一个遮住整个视口的2D框,融合系数和时间相关。

㈧ gl10用哪个编程软件

OpenGL
OpenGL本身是开放图形库的一种标准,定义了一个跨语言、跨平台的编程规范,主要用于3D图形编程。
GLSurfaceView主要用于显示,GLSurfaceView.Render主要用于渲染,GL10类主要用于OpenGLES的具体操作,操作的流程相对繁琐,需要对OpenGL本身有一定了解,因此建议先查看系列文章 专题分纲目录 OpenGL教程。再来研究GL10部分代码,相关文档梳理如下:
GLSurfaceView 官方文档:Android GLSurfaceView类 详细解读;
GLSurfaceView.Render 官方文档:Android GLSurfaceView.Render类 详细解读;
GLSurfaceView的中用于操作OpenGLES的关键类为GL10,在代码中使用最多,因此也做相关解读,GLSurfaceView关键类GL10官方文档:Android OpenGLES关键类GL10 详细解读。

㈨ android opengles2.0值得学习吗

OpenGLES是一个让人崩溃的东西。在Andorid手机上做3D还就得用它。把我记的一些笔记分享在这里吧:

Android OpenGL ES简介 20011-6-3
Android系统使用OpenGL的标准接口来支持3D图形功能,android 3D图形系统也分为java框架和本地代码两部分。
本地代码主要实现的OpenGL接口的库,在Java框架层,javax.microedition.khronos.opengles是java标准的OpenGL包,
android.opengl包提供了OpenGL系统和Android GUI系统之间的联系。
Android的本地代码位于frameworks/base/opengl下,
JNI代码位于frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp和frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp,
java类位于opengl/java/javax/microedition/khronos下
本地测试代码位于frameworks/base/opengl/tests。包括angeles、fillrate等14个测试代码,这些代码都可以通过终端进行本地调用测试(模拟器中使用adb shell)。
OpenGL ES 1.x
固定管线操作,支持glVertexPointer()等函数,不支持GLSL。头文件在ndk的GLES目录下,库文件是libGLESv1_CM.so。
OpenGL ES 2.x
可编程管线操作,不兼容1.x,不支持固定管线操作,例如glVertexPointer()等函数。支持GLSL(还必须用这个来编程)。头文件在ndk的GLES2目录下,库文件是libGLESv2.so。

OpenGL ES学习 2011-6-30
OpenGL定义了自己的数据类型。应该坚持使用这些OpenGL的数据类型,从而保证可移植性和效率。
OpenGL ES 目前不支持64位数据类型。
OpenGL ES 只支持三边形。
OpenGL ES 只支持gl开头的函数,glu库都不支持。
OpenGL ES 从 OpenGL中删除的功能:
1. glBegin/glEnd
2. glArrayElement
3. 显示列表
4. 求值器
5. 索引色模式
6. 自定义裁剪平面
7. glRect
8. 图像处理(这个一般显卡也没有,FireGL/Quadro显卡有)
9. 反馈缓冲
10. 选择缓冲
11. 累积缓冲
12. 边界标志
13. glPolygonMode
14. GL_QUADS,GL_QUAD_STRIP,GL_POLYGON
15. glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib
16. TEXTURE_1D、TEXTURE_3D、TEXTURE_RECT、TEXTURE_CUBE_MAP
17. GL_COMBINE
18. 自动纹理坐标生成
19. 纹理边界
20. GL_CLAMP、GL_CLAMP_TO_BORDER
21. 消失纹理代表
22. 纹理LOD限定
23. 纹理偏好限定
24. 纹理自动压缩、解压缩
25. glDrawPixels,glPixelTransfer,glPixelZoom
26. glReadBuffer,glDrawBuffer,glCopyPixels

OpenGL ES 2.0 2011-10-9
2.0和1.1不兼容。
- 2.0使用的头文件是ndk的include目录下的GLES2目录,有gl2.h,gl2ext.h,gl2platform.h,而1.1使用的是GLES目录。
- 2.0使用的库文件是ndk的lib目录下的libGLESv2.so,而1.1使用的是libGLESv1_CM.so。
- 2.0中取消了很多1.1函数,例如glMatrixModel和glLoadIdentity等。
OpenGL着色语言(GLSL――OpenGL Shading Language)
- 使用2.0,必须学此语言。因为很多1.1的函数都被取消了。

san-angeles NDK OpenGL ES 1.1的例子程序 2012-3-8
San Angeles,查维基网络,是一个虚构的未来概念城市,位于南加州。常在电影中出现,来源自Los Angeles和San Diego.
该程序的演示效果是,观察一个宏伟的城市,地面是镜面有建筑倒影,城市中有飞船飞过。前后有5、6个观察点,而且镜头在每个观察点不停的移动。
这个例子,用NDK(C++)调用OpenGL ES 1.1来绘制了San Angeles这个城市。基本上全部使用了NDK,Java程序只有1个。
用vc2005演示一下,目的通过跟踪代码了解一些细节。方法是:
- 将jni下所有的.h文件,以及demo.c,app-win32.c复制出来,放在一个专门的目录下,然后改造成用OpenGL的而不是ES的。(或者干脆删除大段的绘制代码,保证编译通过)
首先分析Java代码
- DemoActivity.java,这是唯一的Java文件,它主要需要下列4个jni的接口:
- private static native void nativeInit(); // 初始化
- private static native void nativeResize(int w, int h);
- private static native void nativeRender(); // 绘制1帧
- private static native void nativeDone();
其次分析C++代码 app-android.c
- 首先,调用了importGLInit(),动态导入OpenGL的库。
- 其次,调用了 appInit(),在内存中建立了平台无关的3D对象集合。建立方法是用一个数组,用类似画圆拔高的方式产生诸多三角形。
- 然后,在每个时钟周期中调用appRender(),细节是:
- prepareFrame(width, height); // 准备OpenGL ES绘制框架。其实就是清空颜色和深度缓冲,重置投影和模型矩阵。
- camTrack(); // 算好在当前时钟周期,镜头的位置、朝向及焦距等。然后调用gluLookAt来实现。
- configureLightAndMaterial(); // 设置光源和材质
- drawModels(-1); // 先绘制倒影(其实就是将所有模型z轴倒过来画)
- 第一个循环,是画精致的物体
- 第二个循环,是画运动的物体
- drawGroundPlane(); // 再绘制镜子一般的地面。在绘制前取消光照,打开混合,然后绘制。绘制后还原状态。
- drawModels(1); // 再绘制所有模型
- drawFadeQuad(); // 最后绘制淡出框,用融合的方式画一个遮住整个视口的2D框,融合系数和时间相关。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:705
制作脚本网站 发布:2025-10-20 08:17:34 浏览:968
python中的init方法 发布:2025-10-20 08:17:33 浏览:676
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:828
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:737
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1076
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:308
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:188
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:875
python股票数据获取 发布:2025-10-20 07:39:44 浏览:829