欢迎来到天天文库
浏览记录
ID:34723721
大小:121.18 KB
页数:4页
时间:2019-03-10
《javame3d游戏开发框架》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JavaME3D游戏开发框架(一)发表在2010.12.2209:54GMT+8·o评估该帖作者:杨丰盛 随着各种手持设备的性能提升和对3D技术的支持,越来越多的3D游戏出现在了各种手持设备上,3D游戏不仅能渲染出非常漂亮的图形,最重要的是能够给玩家带来更真实的体验,那么本文将分析如何通过JavaME环境来构建一个3D游戏开发框架。JavaME所支持的3D开发包主要有:jsr184和jsr239,其中jsr184是Mobile3DGraphicsAPI简称M3G,M3G的直接访问模式是建立在OpenGL的基础上的,作为它的一个子集和精简部分,保留了很多有效的功能。JSR239则定义
2、了一个几乎与OpenGLES的C接口相同的JavaAPI,使现有OpenGL内容的移植更为容易,OpenGLES是专为内嵌和移动设备设计的一个2D/3D轻量图形库,它是基于OpenGLAPI设计的。OpenGLES1.0版基于OpenGL1.3,而OpenGLES1.1则是基于OpenGL1.5的。现在主要由KhronosGroup来负责管理OpenGLES的开发维护,它几乎已经成为移动设备3D技术的一个事实标准。因此本文将采用该规范,使用JSR239开发包来构建3D游戏。在使用OpenglES开发游戏之前,我们首先需要分析几个名词、概念及其功能。EGL是OpenGLES和底层Nativ
3、e平台视窗系统之间的接口。是为OpenGLES提供平台独立性而设计。OpenGLES为附加功能和可能的平台特性开发提供了扩展机制,但仍然需要一个可以让OpenGLES和本地视窗系统交互且平台无关的层。OpenGLES本质上是一个图形渲染管线的状态机,而EGL则是用于监控这些状态以及维护Framebuffer和其他渲染Surface的外部层。图1-1是一个典型的EGL系统布局图。图1-1典型的EGL系统布局图OpenGLES本质上是一个图形渲染管线的状态机,而EGL则是用于监控这些状态以及维护帧缓冲和其他渲染面的外部层。EGL视窗设计是基于人们熟悉的用于MicrosoftWindows(W
4、GL)和UNIX(GLX)上的OpenGL的Native接口,与后者比较接近。OpenGLES图形管线的状态被存储于EGL管理的一个上下文中。帧缓冲和其他绘制渲染面通过EGLAPI创建、管理和销毁。EGL同时也控制和提供了对设备显示和可能的设备渲染配置的访问。举报引用messi帖子:14加入日期:2010.09.2014:05GMT+8地点:中国JavaME3D游戏开发框架(一)发表在2010.12.2209:55GMT+8·o评估该帖EGL包括一下几个类,分别是EGLDisplay:显示句柄EGLConfig:配置类;EGLContext:渲染上下文;的类和EGLSurface:可渲染
5、的视图类。OpenGLES需要一个渲染上下文和渲染面。渲染上下文中存储OpenGLES的状态信息,渲染面用于图元的绘制。编写OpenGLES之前需要EGL的操作有:Ø 查询设备可以支持的显示句柄,并初始化。Ø 创建渲染面,绘制OpenGLES图形。Ø 创建渲染上下文。EGL需要创建OpenGLES渲染上下文用于关联到某个渲染面。这里我们将初始化EGL的操作整理到一个init函数中,如下代码所示。publicvoidinit(){ //获得egl实例 this.egl=(EGL10)EGLContext.getEGL(); //创建EGLDisplay this.eglDi
6、splay=egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); int[]major_minor=newint[2]; //初始化EGLDispla,获得版本号 egl.eglInitialize(eglDisplay,major_minor); int[]num_config=newint[1]; //得到所有的cofig,数量 egl.eglGetConfigs(eglDisplay,null,0,num_config); System.out.println("num_config[0]="+num_con
7、fig[0]); //设置配置列表 intredSize=getProperty("jsr239.redSize",8); intgreenSize=getProperty("jsr239.greenSize",8); intblueSize=getProperty("jsr239.blueSize",8); intalphaSize=getProperty("jsr239.alphaSize",0); in
此文档下载收益归作者所有