- 浏览: 163104 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
兰斯洛特1987:
顶!!!!谢谢分享.最近我也在研究这玩意...
Java语言的Hook实现 -
pu02203:
我把Confidant.jar, 丢进去eclipse, 里面 ...
重磅推出诛仙辅助软件第二波:Java版按键精灵 -
泣血端午:
Calculagraph 这是哪个类啊?
A星算法 -
haitaohehe:
我使用的是jstl1.0 可是在使用<c:set va ...
JSTL1.0和JSTL1.1的区别 -
micheal19840929:
学习楼主,我也测试一下~看看兼容性吧。lanlanzhilia ...
手机版飞鸽传书:无线牵
3D技术对我们来说已经非常熟悉了,最常用的3D API有OpenGL和Microsoft的Direct 3D,在桌面游戏中早已广泛应用。对于J2ME程序而言,Mobile 3D Graphics API(JSR184)的出现,使得为手机应用程序添加3D功能成为可能。
JSR184标准(M3G:Mobile 3D Graphics)为Java移动应用程序定义了一个简洁的3D API接口,J2ME程序可以非常方便地使用M3G来实现3D应用比如游
戏等等。M3G被设计为非常轻量级的,整个API的完整实现不超过150kb。
如果熟悉OpenGL技术,那么M3G是非常容易理解的。在JSR-184中,Graphics3D是3D渲染的屏幕接口,World代表整个虚拟3D场景,包括Camera(用于设置观察者视角)、Light(灯光)、Background(背景)和树型结构的任意数量的3D物体。Camera默认是朝向Z轴的负方向。3D对象在计算机中用点(Point,Pixel)、线(Line,Polyline,Spline)、面(Mesh)来描述,各个物体都是由Mesh类创建的。不同的Mesh属性对应不同的物体。构造物体时
,先要构造物体的骨架(即形状),然后用一种材料蒙到骨架上。物体的形状,是由一组点和每个点的法向量决定的。材料则可以选择为图片。物体的具体存储和运算(如旋转、投影、特技处理)等动作都是矩阵运算和变换。
M3G是J2ME的一个可选包,以OpenGL为基础的精简版,总共约有250个方法及30个类,运行在CLDC1.1/CLDC2.0上(必须支持浮点运算),可以在MIDP1.0和MIDP2.0中使用。目前,支持M3G的手机有Nokia 6230/3650/7650/6600、Siemens S65/CX65/S55/M55、Sony-Ericsson K700i/P800/P900、Moto 220/T720等。M3G只是一个Java接口,具体的底层3D引擎一般由C代码实现,比如许多手机厂商的3D引擎采用的便是SuperScape公司的Swerve引擎,这是一个专门为移动设备设计的高性能3D引擎。
类似于Microsoft的D3D,M3G支持两种3D模式:立即模式(immediate mode)和保留模式(retained mode)。在立即模式下,开发者必须手动渲染每一帧,从而获得较快的速度,但代码较繁琐;在保留模式下,开发者只需设置好关键帧,剩下的动画由M3G完成,代码较简单,但速度较慢。M3G也允许混合使用这两种模式。
3D模型可以在程序中创建,但是非常繁琐。因此,M3G提供一个Loader类,允许直接从一个单一的.m3g文件中读入全部3D场景。m3g文件可以通过3D Studio Max之类的软件创建。
M3G基于的需求如下:
1)支持保留的场景图形模式;
2)支持直接访问模式;
3)支持两种模式的混合;
4)支持建模,结构,材质以及场景,灯光的三维要素;
5)支持虚拟的浮点运算,不需要硬件支持的浮点运算;
6)保证大小在实际终端小于150K
7)高效的垃圾收集机制(我个人觉得这点非常的重要)
8)能很好的和MIDP相关的应用接口衉作(当然指的就是Canvas)
Mobile 3D Graphics API中有几个比较重要的类:
- Object3D:几乎包中所有类都继承自此类,并且所有可以渲染的类及从m3g文件中载入的类都是它的子类;
- World:整个场景图形结构的基础,所有3D对象都应加入到World对象中。当载入一个m3g文件时,其根对象一般就是一个World对象。当我们渲染场景时,只要将World对象作为一个渲染对象传递给Graphics3D对象即可。
- Graphics3D:3D图形上下文,是一个单例类,提供对象绑定接口,所有渲染都是通过它来实现的。
- Loader:针对所有场景图形、单独的分支以及属性对象的异步载入器(解析器)。可以用于载入m3g文件,即其中所以3D对象。
基本的程序框架:
M3GCanvas.java:
import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.game.GameCanvas; import javax.microedition.m3g.Graphics3D; import javax.microedition.m3g.World; public class M3GCanvas extends GameCanvas implements Runnable { public static final int FPS = 20; //每秒绘制的帧数 private Graphics3D g3d; private World world; private boolean runnable=true; private Thread thread; protected M3GCanvas() { // 不抑制按钮事件 super(false); setFullScreenMode(true); g3d = Graphics3D.getInstance(); world = new World(); } public void run() { Graphics g = getGraphics(); while (runnable) { long startTime = System.currentTimeMillis(); // 处理游戏逻辑 try { // Binds the given Graphics or mutable Image2D // as the rendering target of this Graphics3D g3d.bindTarget(g); g3d.render(world); // Render the world } finally { g3d.releaseTarget(); } flushGraphics(); long endTime = System.currentTimeMillis(); long costTime = endTime - startTime; if(costTime<1000/FPS) { try{ Thread.sleep(1000/FPS-costTime); } catch(Exception e){ e.printStackTrace(); } } } System.out.println("Canvas stopped"); } public void start() { thread=new Thread(this); thread.start(); } public void stop() { this.runnable=false; try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } }
M3GDemo.java:
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class M3GDemo extends MIDlet implements CommandListener { private M3GCanvas canvas; public M3GDemo() { this.canvas=new M3GCanvas(); } protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { this.canvas.stop(); } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { Display.getDisplay(this).setCurrent(this.canvas); this.canvas.start(); } public void commandAction(Command c, Displayable d) { notifyDestroyed(); } }
发表评论
-
J2ME的RMS
2010-04-10 23:32 2465在JAVAME中,程 ... -
M3G游戏中性能提升技巧
2010-03-28 17:59 702JSR184 M3G(Mobile 3D Grap ... -
在J2ME开发中获取系统属性
2010-03-27 18:21 488在J2ME开发中,我们经常需要和手机系统进行交互,获得一些和系 ... -
导出M3G文件指南
2010-03-25 12:54 919概述: 这 ... -
J2ME中使用microlog
2010-03-22 22:17 1374import javax.microedition.mi ... -
M3G教程:进阶篇(六)动画
2010-03-21 21:33 1271M3G中动画的数据结构如下: 【载入W ... -
3DS MAX导出M3G动画
2010-03-21 10:11 19501、用3D Studio Max或者Maya的插件h3texp ... -
M3G教程:进阶篇(四)模型
2010-03-21 01:18 1016import javax.microedition.lc ... -
M3G教程:进阶篇(三)纹理
2010-03-21 01:18 985纹理(Texture) java.lang.Objec ... -
M3G教程:进阶篇(二)灯光
2010-03-21 01:16 1624灯光(Lighting) java.lang.Obje ... -
M3G教程:进阶篇(一)金字塔
2010-03-21 01:15 1170关于World public class World ... -
一点对m3g模型文件解析的工作
2010-02-11 09:49 824因为最近不会在m3g文件上继续工作,把之前一点少少的工作放出来 ... -
J2ME 3d之3DMAX制作M3G错误二例
2010-02-11 09:35 0(1) 在制作J2ME 3D所需的M3G时出现导出 ... -
M3G教程:进阶篇(五)立即模式
2010-02-09 23:51 0保留模式和立即模式渲染 保留模式是当你使用一个世界它含有的全 ... -
KVM的类加载
2010-02-09 15:46 787首先简要介绍一下class文件的结构(详细内容请参考Java虚 ... -
手机版飞鸽传书:无线牵
2010-01-30 21:02 2874【中文名】无线 ... -
FileConnection简介(JSR-75)
2010-01-29 01:17 8611 引言 本文档 ... -
J2ME添加自定义图标
2010-01-23 23:52 1330与图标有关的是这两行: MIDlet-Icon: ... -
j2me签名相关注意事项
2010-01-23 23:45 1992我们得到一个证书后就可以对j2me的jad文件进行签名。这 ... -
JAD中文名字解决方法
2010-01-12 16:44 798最近正好在弄JAD,碰到中文无法显示的问题,之前就碰到过,但没 ...
相关推荐
**M3G API Docs**,全称为Mobile 3D Graphics API文档,是针对移动设备上3D图形编程的一套接口规范。这套API旨在为手持设备如智能手机和平板电脑提供高效、低功耗的3D图形处理能力,使开发者能够创建出具有丰富视觉...
M3G查看器是一个独立的应用程序,用于查看3D图形文件格式的内容,该格式是对移动3D图形API(M3G)的补充。
【M3G 快速模式编程】:M3G,全称Mobile 3D Graphics API,是基于JSR 184规范定义的一种为移动设备提供标准3D图形功能的API。它分为快速模式和保留模式。快速模式专注于单个3D对象的渲染,适合进行低级别的3D操作,...
《Mobile 3D Graphics with OpenGL ES and M3G》是一本深入探讨移动设备上3D图形编程的专业书籍,主要关注于OpenGL ES和M3G这两个技术。OpenGL ES(OpenGL for Embedded Systems)是OpenGL的轻量级版本,专为嵌入式...
M3M0渗透测试工具 M3m0工具 :crossed_swords: 网站漏洞扫描程序和自动浏览器您可以使用此工具通过在网站中找到漏洞来检查安全性,也可以使用此工具来获取Shell | 污损| cPanels | 资料库 M3M0 :laptop:M3m0工具 :...
《宝箧印塔模型设计与实现——基于Java M3G技术》 在移动设备领域,尤其是在支持Java 2 Micro Edition(J2ME)的手机上,实现三维图形渲染是一项技术挑战。本文将深入探讨如何利用Java M3G(Mobile 3D Graphics)...
源码说明:一个纯静态的M3U8播放器页面,可以直接把M3U8的网址填进去进行播放,超级方便。 部署方法: 可以使用宝塔面板来部署 1,打开宝塔面板,添加一个网站 2,把压缩包上传到站点跟目录,然后解压 3,解压以后...
联想BIOS_L-IG41M3 V1.1 版本:DMKT05AUS 新圆梦F208 原机备份 支持Q9400 支持8G内存 需两条4G双面内存 两个BIOS文件 AFUWIN备份的BIOS BIOS_Backup_TooKit_V2.0备份的BIOS
横河PLC快速入门教程 -FA-M3入门手册pdf,横河PLC快速入门教程 -FA-M3入门手册
tk_m3gtk_v4_5.zip tk_m3gtk_v4_5.zip 一款M3G文件查看器,Java J2ME中保留模式中必用。
ADS学习入门篇是针对初学者精心设计的一系列教程,旨在帮助新手快速掌握ADS的使用方法,包括创建项目、编写代码、编译、链接以及调试等多个关键步骤。 一、创建工程 在ADS中,工程是管理项目文件的核心。创建工程时...
【标题】"jsr184+M3G+API.rar" 涉及到的主要技术是Java Mobile 3D Graphics API(JSR 184)和M3G(Mobile 3D Graphics)标准,以及相关的API接口。JSR 184是Java Community Process发布的一个规范,目的是为Java ME...
《M3GToolkit-0.5.0:深入解析M3G文件检查工具》 M3GToolkit-0.5.0是一款专为J2ME(Java 2 Micro Edition)开发者设计的实用工具,用于检查和分析M3G(Mobile 3D Graphics)文件。在移动设备上的3D图形开发中,M3G...
手机 JAVA JSR184 M3G 游戏 DEMO
m3u8Dowloadjava下载m3u8视频,解密并合并tsm3u8链接获取方式以及代码分析请参见:准备JDK:1.8开发环境:IntelliJ IDEA用于解密的jar包:bcprov-jdk16-139.jar了解一些m3u8标签作用...M3u8DownloadFactory.getInstance...
M3U8装载机加载m3u8并将段连接到mp4谷歌播放谢谢翻译: 中文: TayLin
武汉长光科技有限公司OpticalinkM3-0400G用户手册 武汉长光科技有限公司的OpticalinkM3-0400G用户手册是关于EPON ONU的使用指南,该手册详细介绍了OpticalinkM3-0400G ONU的性能特点、外观结构和安装方法。以下是该...
本cad2020视频教程,全集共112集视频课程,该2020版CAD视频教学内容包括三个阶段:入门操作篇(1-40集)-提高篇(41-80课)-高级操作篇(81-112课) )。主要内容涉及:CAD2020界面认识、CAD帮助与命令、画水平线和...
直播资源M3U8,是一种用于传输多媒体流的标准格式,广泛应用于网络直播领域。M3U8文件包含了播放器需要的视频、音频等资源链接,以及播放顺序和相关信息,使得实时流媒体的传输和播放更为高效和灵活。这种格式特别...
m3u8 m3u8文件下载器库以及chrome和firefox扩展/插件用法下载并保存m3u8文件: var p = new m3u8_processor . DownloadFileAndSaveInputParams (){ m3u8FileUrl = < M3U8> , OutputFileName = @" C:\abc.avi " ,};...