- 浏览: 166527 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
兰斯洛特1987:
顶!!!!谢谢分享.最近我也在研究这玩意...
Java语言的Hook实现 -
pu02203:
我把Confidant.jar, 丢进去eclipse, 里面 ...
重磅推出诛仙辅助软件第二波:Java版按键精灵 -
泣血端午:
Calculagraph 这是哪个类啊?
A星算法 -
haitaohehe:
我使用的是jstl1.0 可是在使用<c:set va ...
JSTL1.0和JSTL1.1的区别 -
micheal19840929:
学习楼主,我也测试一下~看看兼容性吧。lanlanzhilia ...
手机版飞鸽传书:无线牵
因为最近不会在m3g文件上继续工作,把之前一点少少的工作放出来,希望可以有点帮助
/* * Main.java * * Created on 2005年5月15日, 下午11:41 */ package m3gloader; import java.io.*; import java.util.zip.*; /** * * @author admin */ public class Main { /** Creates a new instance of Main */ public Main() { } /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { File f=new File("otokka_jump2.m3g"); System.out.println("\nFile \""+f.toString()+"\" exists? : "+f.exists()); if(!f.exists()) err("File "+f.toString()+" does not exists!"); FileInputStream fis=new FileInputStream(f); M3GDataInputStream dis=new M3GDataInputStream(fis); System.out.println("====== File identifier ======"); byte[] fileIdentifier=new byte[12]; if(dis.available()>=12){ dis.read(fileIdentifier); System.out.println("File Identifier is: "); for(int l=0;l<fileIdentifier.length;l++) System.out.print(fileIdentifier[l]+" "); System.out.print("\nFile Identifier characters is: \n"); System.out.println(new String(fileIdentifier)); System.out.println("====== end of file identifier ======\n"); } else err("File Identifier Error! "); /* Section 0: Header Object */ System.out.println("====== Section 0: Header Object ======"); if(dis.available()<5) err("Section 0: Header error! "); System.out.println("CompressionScheme: "+dis.readByte()); UInt32 totalSectionLength=dis.readUInt32(); //We have read 5 bytes.So we just check if (totalSectionLength.longvalue()-5) is available. if(dis.available()<totalSectionLength.longvalue()-5) err("Section 0: Content error! "); System.out.println("TotalSectionLength: "+totalSectionLength); System.out.println("UncompressedLength: "+dis.readUInt32()); System.out.println("$$$$$$ Objects $$$$$$"); System.out.println("ObjectType: "+dis.readByte()); //length1 is the length of 1st object we load, length2 is the 2nd. UInt32 length1=dis.readUInt32(); System.out.println("Length: "+length1); System.out.print("VersionNumber: "); System.out.print(dis.readByte()+"."); System.out.println(dis.readByte()); System.out.println("hasExternalReferences: "+dis.readBoolean()); System.out.println("TotalFileSize: "+dis.readUInt32()); System.out.println("ApproximateContentSize: "+dis.readUInt32()); /* Head Object contain: Byte[2] VersionNumber Boolean hasExternalReferences UInt32 TotalFileSize UInt32 ApproximateContentSize String AuthoringField So AuthoringField's length is object (length-11) */ byte[] authoringField=new byte[length1.intvalue()-11]; dis.readFully(authoringField); System.out.println("------ AuthoringField ------"); System.out.println(new String(authoringField,"UTF-8")); System.out.println("------ End of AuthoringField ------"); System.out.println("$$$$$$ End of Objects $$$$$$"); System.out.println("Checksum: "+dis.readUInt32()); System.out.println("====== End of Section 0: Header Object ======\n"); //new section System.out.println(dis.readByte()); System.out.println(dis.readUInt32()); System.out.println(dis.readUInt32()); M3GInflaterInputStream iis=new M3GInflaterInputStream(fis); System.out.println(iis.read()); System.out.println(iis.readUInt32()); /////////////////////a camera //user id System.out.println(iis.readUInt32()); //animation track System.out.println(iis.readUInt32()); //user para System.out.println(iis.readUInt32()); //hasComponentTransform; System.out.println(iis.read()); //hasGeneralTransform; System.out.println(iis.read()); //enable rendering System.out.println(iis.read()); // enablePicking; System.out.println(iis.read()); // alphaFactor; System.out.println(iis.read()); //scope; System.out.println(iis.readUInt32()); //hasAlignment; System.out.println(iis.read()); //h System.out.println(iis.read()); System.out.println(iis.readUInt32()); System.out.println(iis.readUInt32()); System.out.println(iis.readUInt32()); System.out.println(iis.readUInt32()); /////////////next object///////////////////// //image 2d System.out.println(iis.read()); System.out.println(iis.readUInt32()); //user id System.out.println(iis.readUInt32()); //animation tracks System.out.println(iis.readUInt32()); //user object System.out.println(iis.readUInt32()); //format System.out.println(iis.read()); //is mutable System.out.println(iis.read()); //width System.out.println(iis.readUInt32()); //height System.out.println(iis.readUInt32()); // palette; System.out.println(iis.read()); //pixels; System.out.println(iis.read()); /* for(int l=0;l<4894;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<40;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<66;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<66;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<66;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<41;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<29;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<25;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); for(int l=0;l<68;l++) iis.read(); System.out.println(iis.read()); System.out.println(iis.readUInt32()); */ dis.close(); fis.close(); } public static void err(String msg){ System.out.println("\n**** An error has occured!!! The program was terminated!!! The errot infomation is: "); System.out.println(msg+"\n"); System.exit(0); } static class M3GDataInputStream extends DataInputStream{ public M3GDataInputStream(InputStream in){ super(in); } public UInt32 readUInt32() throws IOException { int ch1 = in.read(); int ch2 = in.read(); int ch3 = in.read(); long ch4 = in.read(); //System.out.println(ch1+" "+ch2+" "+ch3+" "+ch4); if ((ch1 | ch2 | ch3 | ch4) < 0) throw new EOFException(); return new UInt32((ch1 << 0) + (ch2 << 8) + (ch3 << 16) + (ch4 << 24)); } } static class M3GInflaterInputStream extends InflaterInputStream{ public M3GInflaterInputStream(InputStream in){ super(in,new Inflater(),32); } public UInt32 readUInt32() throws IOException { int ch1 = super.read(); int ch2 = super.read(); int ch3 = super.read(); long ch4 = super.read(); //System.out.println(ch1+" "+ch2+" "+ch3+" "+ch4); if ((ch1 | ch2 | ch3 | ch4) < 0) throw new EOFException(); return new UInt32((ch1 << 0) + (ch2 << 8) + (ch3 << 16) + (ch4 << 24)); } } static class Float32{ } static class UInt32{ private long value; public UInt32(long value){ this.value=value; Integer f=new Integer(2); } public long longvalue(){ return value; } public int intvalue(){ if(value > 2147483647 && value < -2147483648) throw new ClassCastException(); return (int)value; } public String toString(){ return Long.toString(value); } } }
发表评论
-
J2ME的RMS
2010-04-10 23:32 2495在JAVAME中,程 ... -
M3G游戏中性能提升技巧
2010-03-28 17:59 737JSR184 M3G(Mobile 3D Grap ... -
在J2ME开发中获取系统属性
2010-03-27 18:21 509在J2ME开发中,我们经常需要和手机系统进行交互,获得一些和系 ... -
导出M3G文件指南
2010-03-25 12:54 940概述: 这 ... -
J2ME中使用microlog
2010-03-22 22:17 1396import javax.microedition.mi ... -
M3G教程:进阶篇(六)动画
2010-03-21 21:33 1300M3G中动画的数据结构如下: 【载入W ... -
3DS MAX导出M3G动画
2010-03-21 10:11 19831、用3D Studio Max或者Maya的插件h3texp ... -
M3G教程:进阶篇(四)模型
2010-03-21 01:18 1045import javax.microedition.lc ... -
M3G教程:进阶篇(三)纹理
2010-03-21 01:18 1017纹理(Texture) java.lang.Objec ... -
M3G教程:进阶篇(二)灯光
2010-03-21 01:16 1652灯光(Lighting) java.lang.Obje ... -
M3G教程:进阶篇(一)金字塔
2010-03-21 01:15 1197关于World public class World ... -
M3G教程:入门篇
2010-03-21 01:14 16253D技术对我们来 ... -
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 8751 引言 本文档 ... -
J2ME添加自定义图标
2010-01-23 23:52 1356与图标有关的是这两行: MIDlet-Icon: ... -
j2me签名相关注意事项
2010-01-23 23:45 2014我们得到一个证书后就可以对j2me的jad文件进行签名。这 ... -
JAD中文名字解决方法
2010-01-12 16:44 835最近正好在弄JAD,碰到中文无法显示的问题,之前就碰到过,但没 ...
相关推荐
1. **M3G解析器**:这是程序的核心部分,负责读取M3G文件的二进制数据,解析出模型的几何信息、材质属性、光照设置、动画序列等,并将其转化为可以显示的结构。 2. **3D渲染引擎**:利用Java J2ME的图形库,将解析...
3. **加载模型**:根据解析出的数据,创建M3G模型实例,并将它们添加到场景中。 4. **应用纹理和动画**:将M3G文件中包含的纹理映射到模型表面,并根据需要启动动画。 5. **渲染帧**:使用M3G API的渲染函数,每帧...
《M3GToolkit-0.5.0:深入解析M3G文件检查工具》 M3GToolkit-0.5.0是一款专为J2ME(Java 2 Micro Edition)开发者设计的实用工具,用于检查和分析M3G(Mobile 3D Graphics)文件。在移动设备上的3D图形开发中,M3G...
Eclipse M3g Viewer 的出现,极大地便利了开发者对M3G格式文件的检查和调试。 此插件适用于Eclipse 3.1版本或更高,具体要求为I20050627构建或更新版本。这意味着,如果你的Eclipse版本低于这个要求,可能无法正常...
6. **光照和纹理**:M3G提供了光照模型,可以添加光源来模拟真实世界的光照效果。同时,通过`Texture2D`对象加载地形纹理,结合高度信息进行混合,使地形更具视觉吸引力。 7. **渲染**:最后,调用`World`对象的`...
在J2ME程序中,我们需要解析这些文件并将数据加载到M3G对象中。 2. **场景管理**:创建一个3D场景,包括定义物体的位置、旋转和缩放,以及它们之间的关系。这通常涉及对M3G的WorldNode和GroupNode类的使用。 3. **...
- 其他:除了这些,assimp还支持许多其他格式,如3DS、FBX、BLEND、COLLADA、GLTF、MD5、MD2、MD3、MDL、M3G、3DMAX、X、3DSMAX、PLY、STL、IFC、B3D、NFF、OFF、ASE、Q3D、Q3BSP、RAW、WOX、X3D、ZGL等。...
本文将深入探讨"Autodesk 3dsMax exporters for 3DVIA Studio"这一主题,解析如何利用3dsMax的导出功能,将精心制作的3D模型无缝导入到3DVIA Studio中,以便于分享、协作和展示。 3dsMax支持的版本包括9、2008、...
2. **加载模型**:在J2ME程序中读取模型文件,解析顶点、纹理和索引信息。 3. **渲染设置**:配置光照、相机视角和渲染参数。 4. **绘制模型**:通过调用M3G API的函数将模型渲染到屏幕上。 5. **动画和交互**:实现...
压缩包内的“ColombiaEGM08.byn”文件可能是项目的数据文件,格式可能是专有的或经过压缩的,用于存储与EGM08相关的地球重力模型数据。这种数据通常由一系列的重力场系数组成,用于计算地球表面或近地空间的重力场。...
再者,**G代码解析**是将3D模型转换为机器可理解指令的过程。STM32F103可以读取并解析G代码文件,将指令转化为电机运动信号。G代码是一种通用的编程语言,用于指示3D打印机进行特定的移动和操作。 此外,**温度控制...
根据提供的文件信息,以下是关于“基于MATLAB模型的南水北调受水县城地下水开采量预测与评价”的知识点解析: 1. 南水北调项目背景 南水北调是我国为了解决北方地区水资源短缺问题,特别是京津冀地区水资源供需矛盾...
GRBL是一种开源的G代码解析器,主要用于控制小型数控机床,如3D打印机和激光切割机。它将接收到的G代码指令转化为精确的电机运动命令。STM32F103是意法半导体(STMicroelectronics)生产的一款基于ARM Cortex-M3内核...
在程序中直接使用M3G文件,不仅简化了开发流程,还能确保游戏运行时的流畅性和稳定性。 ### 蓝牙技术 #### RFCOMM协议 项目中还实现了蓝牙技术,以便支持双人对战模式。这一功能的实现基于RFCOMM协议,该协议是一...
j2ME的M3G库支持模型加载和渲染,以及纹理的映射和管理。 5. **声音和动画**:虽然j2ME的音频功能相对有限,但仍然可以实现简单的音效和背景音乐。动画则可能通过改变模型的位置和角度来实现,比如赛车的行驶和转弯...
2. **G代码编程**:理解G代码的基本语法和用途,如上述的G00、G01等,以及M代码(辅助功能),如M3/M4(启动主轴正转/反转),M5(停止主轴)。 3. **速度控制**:GRBL允许通过G代码设置进给速度(F值)和主轴速度...
G代码生成通常由CAD/CAM软件完成,它可以基于设计模型自动生成对应的运动轨迹。 实现这一控制过程通常分为以下几个步骤: 1. **G代码解析**:STM32F205接收到G代码后,解析代码中的各个命令,如G01(直线插补)、...
保留模式构造3D场景章节讲解了如何加载和解析M3G文件,以及使用3ds max、Maya和Blender等软件构建3D场景,并展示了如何浏览M3G文件。 3D动画制作章节则涵盖了动画的基本概念,如关键帧序列、动画轨迹和动画控制器,...
文章未提供系统软件设计的具体内容,但从其设计思路可以看出,软件部分应该包括对硬件的精确控制逻辑,比如模型数据的解析、温度控制算法、运动轨迹规划和用户交互界面的设计。考虑到3D打印机需要精确控制三维打印...
STM32F103ZGT6是意法半导体(STMicroelectronics)生产的一款基于ARM Cortex-M3内核的微控制器,它具有丰富的外设接口和高速处理能力,适用于实时控制和数据处理。在这个项目中,STM32F103ZGT6作为主控芯片,通过其...