- 浏览: 166372 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
兰斯洛特1987:
顶!!!!谢谢分享.最近我也在研究这玩意...
Java语言的Hook实现 -
pu02203:
我把Confidant.jar, 丢进去eclipse, 里面 ...
重磅推出诛仙辅助软件第二波:Java版按键精灵 -
泣血端午:
Calculagraph 这是哪个类啊?
A星算法 -
haitaohehe:
我使用的是jstl1.0 可是在使用<c:set va ...
JSTL1.0和JSTL1.1的区别 -
micheal19840929:
学习楼主,我也测试一下~看看兼容性吧。lanlanzhilia ...
手机版飞鸽传书:无线牵
import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.game.GameCanvas; import javax.microedition.m3g.Camera; import javax.microedition.m3g.Graphics3D; import javax.microedition.m3g.Light; import javax.microedition.m3g.Loader; import javax.microedition.m3g.Object3D; import javax.microedition.m3g.Transform; import javax.microedition.m3g.World; public class M3GCanvas extends GameCanvas implements Runnable { public static final int FPS = 50; //每秒绘制的帧数 // Thread-control boolean running = false; boolean done = true; // If the game should end public static boolean gameOver = false; // Rendering hints public static final int STRONG_RENDERING_HINTS = Graphics3D.ANTIALIAS | Graphics3D.TRUE_COLOR | Graphics3D.DITHER; public static final int WEAK_RENDERING_HINTS = 0; public static int RENDERING_HINTS = STRONG_RENDERING_HINTS; // Key array boolean[] key = new boolean[5]; // Key constants public static final int FIRE = 0; public static final int UP = 1; public static final int DOWN = 2; public static final int LEFT = 3; public static final int RIGHT = 4; // Global identity matrix Transform identity = new Transform(); // Camera rotation float camRot = 0.0f; double camSine = 0.0f; double camCosine = 0.0f; // Head bobbing float headDeg = 0.0f; private Graphics3D g3d; private World world; private boolean runnable=true; private Thread thread; private Camera camera; protected M3GCanvas() { super(false); setFullScreenMode(true); g3d = Graphics3D.getInstance(); //Load our world loadWorld(); // Load our camera loadCamera(); } /** Loads our camera */ private void loadCamera() { // BAD! if (world == null) return; // Get the active camera from the world camera = world.getActiveCamera(); // Create a light Light l = new Light(); // Make sure it's AMBIENT l.setMode(Light.AMBIENT); // We want a little higher intensity l.setIntensity(3.0f); // Add it to our world world.addChild(l); } /** Loads our world */ private void loadWorld() { try { // Loading the world is very simple. Note that I like to use a // res-folder that I keep all files in. If you normally just put // your // resources in the project root, then load it from the root. Object3D[] buffer = Loader.load("/map.m3g"); // Find the world node, best to do it the "safe" way for (int i = 0; i < buffer.length; i++) { if (buffer[i] instanceof World) { world = (World) buffer[i]; break; } } // Clean objects buffer = null; } catch (Exception e) { // ERROR! System.out.println("Loading error!"); reportException(e); } } private void moveCamera() { // Check controls if (key[LEFT]) { camRot += 5.0f; } else if (key[RIGHT]) { camRot -= 5.0f; } // Set the orientation camera.setOrientation(camRot, 0.0f, 1.0f, 0.0f); // Calculate trigonometry for camera movement double rads = Math.toRadians(camRot); camSine = Math.sin(rads); camCosine = Math.cos(rads); if (key[UP]) { // Move forward camera.translate(-2.0f * (float) camSine, 0.0f, -2.0f * (float) camCosine); // Bob head headDeg += 0.5f; // A simple way to "bob" the camera as the user moves camera.translate(0.0f, (float) Math.sin(headDeg) / 3.0f, 0.0f); } else if (key[DOWN]) { // Move backward camera.translate(2.0f * (float) camSine, 0.0f, 2.0f * (float) camCosine); // Bob head headDeg -= 0.5f; // A simple way to "bob" the camera as the user moves camera.translate(0.0f, (float) Math.sin(headDeg) / 3.0f, 0.0f); } // If the user presses the FIRE key, let's quit if (key[FIRE]) System.out.println("Fire"); } private void reportException(Exception e) { System.out.println(e.getMessage()); System.out.println(e); e.printStackTrace(); } protected void process() { int keys = getKeyStates(); if ((keys & GameCanvas.FIRE_PRESSED) != 0) key[FIRE] = true; else key[FIRE] = false; if ((keys & GameCanvas.UP_PRESSED) != 0) key[UP] = true; else key[UP] = false; if ((keys & GameCanvas.DOWN_PRESSED) != 0) key[DOWN] = true; else key[DOWN] = false; if ((keys & GameCanvas.LEFT_PRESSED) != 0) key[LEFT] = true; else key[LEFT] = false; if ((keys & GameCanvas.RIGHT_PRESSED) != 0) key[RIGHT] = true; else key[RIGHT] = false; } public void run() { Graphics g = getGraphics(); while (runnable) { long startTime = System.currentTimeMillis(); //Call the process method (computes keys) process(); //Move the camera around moveCamera(); try { //First bind the graphics object. We use our pre-defined rendering // hints. g3d.bindTarget(g, true, RENDERING_HINTS); //Now, just render the world. Simple as pie! g3d.render(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(); } } }
效果如下:
发表评论
-
J2ME的RMS
2010-04-10 23:32 2492在JAVAME中,程 ... -
M3G游戏中性能提升技巧
2010-03-28 17:59 736JSR184 M3G(Mobile 3D Grap ... -
在J2ME开发中获取系统属性
2010-03-27 18:21 507在J2ME开发中,我们经常需要和手机系统进行交互,获得一些和系 ... -
导出M3G文件指南
2010-03-25 12:54 940概述: 这 ... -
J2ME中使用microlog
2010-03-22 22:17 1395import javax.microedition.mi ... -
M3G教程:进阶篇(六)动画
2010-03-21 21:33 1299M3G中动画的数据结构如下: 【载入W ... -
3DS MAX导出M3G动画
2010-03-21 10:11 19831、用3D Studio Max或者Maya的插件h3texp ... -
M3G教程:进阶篇(三)纹理
2010-03-21 01:18 1015纹理(Texture) java.lang.Objec ... -
M3G教程:进阶篇(二)灯光
2010-03-21 01:16 1652灯光(Lighting) java.lang.Obje ... -
M3G教程:进阶篇(一)金字塔
2010-03-21 01:15 1196关于World public class World ... -
M3G教程:入门篇
2010-03-21 01:14 16253D技术对我们来 ... -
一点对m3g模型文件解析的工作
2010-02-11 09:49 848因为最近不会在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 811首先简要介绍一下class文件的结构(详细内容请参考Java虚 ... -
手机版飞鸽传书:无线牵
2010-01-30 21:02 2911【中文名】无线 ... -
FileConnection简介(JSR-75)
2010-01-29 01:17 8741 引言 本文档 ... -
J2ME添加自定义图标
2010-01-23 23:52 1354与图标有关的是这两行: MIDlet-Icon: ... -
j2me签名相关注意事项
2010-01-23 23:45 2011我们得到一个证书后就可以对j2me的jad文件进行签名。这 ... -
JAD中文名字解决方法
2010-01-12 16:44 834最近正好在弄JAD,碰到中文无法显示的问题,之前就碰到过,但没 ...
相关推荐
《宝箧印塔模型设计与实现——基于Java M3G技术》 在移动设备领域,尤其是在支持Java 2 Micro Edition(J2ME)的手机上,实现三维图形渲染是一项技术挑战。本文将深入探讨如何利用Java M3G(Mobile 3D Graphics)...
2. **对象模型**:M3G API提供了一系列的对象,如World、Transform、Appearance、Image等,它们代表了3D图形的不同方面,如世界坐标系、物体变换、表面外观和图像纹理。 3. **3D几何**:掌握如何使用M3G API创建和...
M3G查看器是一个独立的应用程序,用于查看3D图形文件格式的内容,该格式是对移动3D图形API(M3G)的补充。
1. **M3G解析器**:这是程序的核心部分,负责读取M3G文件的二进制数据,解析出模型的几何信息、材质属性、光照设置、动画序列等,并将其转化为可以显示的结构。 2. **3D渲染引擎**:利用Java J2ME的图形库,将解析...
【M3G 快速模式编程】:M3G,全称Mobile 3D Graphics API,是基于JSR 184规范定义的一种为移动设备提供标准3D图形功能的API。它分为快速模式和保留模式。快速模式专注于单个3D对象的渲染,适合进行低级别的3D操作,...
4. **m3g**:这是M3G文件格式的提及,它是JSR 184中定义的一种专为移动设备优化的3D模型格式。这种格式旨在减少存储空间和内存需求,同时保持足够的图形质量,以适应资源有限的移动设备。 在DEMO程序中,`jsr_184_...
**J2ME_M3G_API** 是一个与Java 2 Micro Edition(J2ME)相关的压缩包,专注于M3G(Mobile 3D Graphics)API的文档。M3G API是J2ME平台上的一个标准,它允许开发者创建在移动设备上运行的3D图形应用程序。JSR 184...
标题 "m3e-base.tgz" 提供的信息较少,它很可能是一个包含软件库、模型或者数据集的压缩文件,格式为 tar.gz。这种格式在IT行业中常见于源代码分布、机器学习模型或大数据集的存储,因为它能有效地压缩大量文件。"m3...
《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工具 :...
"M3G2FBX_neko_" 提供了解决这一问题的解决方案,它是一款专为游戏设计的模型转换工具,主要功能是将M3G格式的模型转换为FBX格式。M3G是一种由Java 3D API支持的3D模型格式,而FBX则是Autodesk的通用3D模型交换格式...
M3 Import Script,3ds Max 的M3模型导出
**M3_ARIMA:在M3比赛数据上快速训练ARIMA模型** ARIMA(自回归整合滑动平均模型)是时间序列分析中的一个重要工具,常用于预测未来趋势。M3比赛是一个著名的时间序列预测竞赛,提供了大量真实世界的时间序列数据,...
3. **加载模型**:根据解析出的数据,创建M3G模型实例,并将它们添加到场景中。 4. **应用纹理和动画**:将M3G文件中包含的纹理映射到模型表面,并根据需要启动动画。 5. **渲染帧**:使用M3G API的渲染函数,每帧...
m3u8在线下载工具_m3u8视频在线提取工具 在数字化的时代,网络视频已经成为我们娱乐和学习的重要来源。其中,M3U8是一种广泛用于流媒体传输的文件格式,尤其在高清视频领域。然而,直接下载M3U8格式的视频并不像下载...
Java M3G是Java Micro Edition (JME) 平台上用于移动设备3D图形开发的API,它基于OpenGL ES标准,使得开发者能够在手机等嵌入式设备上创建复杂的3D游戏和应用程序。这个"Java M3G相关类.rar"压缩包包含了一些关键的...
《M3GToolkit-0.5.0:深入解析M3G文件检查工具》 M3GToolkit-0.5.0是一款专为J2ME(Java 2 Micro Edition)开发者设计的实用工具,用于检查和分析M3G(Mobile 3D Graphics)文件。在移动设备上的3D图形开发中,M3G...
M3G与JSR 184的关系是,JSR 184是Java对M3G标准的实现,使得开发者可以通过Java语言来操作M3G模型。 **API接口** API接口是开发者与这些技术交互的桥梁。JSR 184 API提供了一系列的类和接口,如`javax.microedition...