手机3D已经相当流行,现在将学习到的信息进行总结一下:
一般来说,M3G支持两种3D模式:立即模式(immediate mode)和保留模式(retained mode)。
怎么来获取数据文件?
Object3D[] objects = Loader.load("file.M3G");
Object3D[] objects2 = Loader.load(byteArray, offset);
他们均返回一个对象数组,即为三维动画数据。
有了这个信息,我们来寻找数据中的世界节点:
private void loadWorld()
{
try
{
Object3D[] buffer = Loader.load("/res/map.M3G");
for(int i = 0; i < buffer.length; i++)
{
if(buffer[i] instanceof World)
{
world = (World)buffer[i];
break;
}
}
buffer = null;
}
catch(Exception e)
{
System.out.println("Loading error!");
reportException(e);
}
}
获取到世界节点,下边我们可以进行处理数据对象了。
获取照相机对象:
private void loadCamera() {
if (world == null)
return;
cam = world.getActiveCamera();
Light l = new Light();
l.setMode(Light.AMBIENT);
l.setIntensity(3.0f);
world.addChild(l);
}
注意:上放代码在世界节点增加了光照效果。另外,照相机可以与世界节点同级别,可以通过下边的代码来创建。
Camera cam = new Camera();
cam.translate(3.0f, 0.0f, 3.0f);
现在来看一下怎么处理我们获取的照相机对象:
private void moveCamera() {
if (key[LEFT]) {
camRot += 5.0f;
} else if (key[RIGHT]) {
camRot -= 5.0f;
}
cam.setOrientation(camRot, 0.0f, 1.0f, 0.0f);
double rads = Math.toRadians(camRot);
camSine = Math.sin(rads);
camCosine = Math.cos(rads);
if (key[UP]) {
// Move forward
cam.translate(-2.0f * (float) camSine, 0.0f, -2.0f * (float) camCosine);
headDeg += 0.5f;
cam.translate(0.0f, (float) Math.sin(headDeg) / 3.0f, 0.0f);
} else if (key[DOWN]) {
// Move backward
cam.translate(2.0f * (float) camSine, 0.0f, 2.0f * (float) camCosine);
headDeg -= 0.5f;
cam.translate(0.0f, (float) Math.sin(headDeg) / 3.0f, 0.0f);
}
}
对于左右方向的旋转,我们使用照相机的函数(相对固定y轴):
setOrientation(f,f, f,f);
对于前后方向的移动,我们使用照相机的函数(为了效果,我们记录旋转的角度,x、y、z均变动):
translate(f, f, f);
好了,获取到了世界节点,并且可以简单的进行动画的移动处理。
如何来绘制,展现于手机上呢?
Graphics3D g3d = Graphics3D.getInstance();
g3d.bindTarget(g, true, RENDERING_HINTS);
g3d.render(world);
最后不要忘记了:
g3d.releaseTarget();
好了,在建立一个运行的线程,监视移动中的画面变动。
程序结束。
整体的思路是:
我们可以通过读取一个m3g文件来获取三维数据,然后可以通过这些数据找到我们需要的信息,当然,最重要的是World数据,有了它,我们可以加入对他的处理。
因为通过World可以获取到Camera,然后通过Camera的移动来改变角度,是我们产生3D的感觉。当然你也可以加入光照、纹理、网格等信息,来达到不同的效果。
在通常的Graphics中,我们只处理二维图形,处理三维的应该使用Graphics3D,我们可以通过Graphics3D.getInstance()来获取,然后将其与World进行绑定。
思路顺了,一切OK。
参见原文
:https://developer.sonyericsson.com/site/global/techsupport/tipstrickscode/mobilejava3d/p_java3d_tutorial_part1_compliments_redikod.jsp
分享到:
相关推荐
综上所述,3D打印作为一项革命性的制造技术,其发展前景广阔,尤其是在高端制造业的应用,有望推动整个行业进入一个新的快速发展阶段。投资者和相关企业应密切关注政策动向和技术进步,以便抓住市场机遇,应对潜在...
《手机Java3D编程快速入门》是一本专为想要在移动平台上进行三维图形开发的初学者准备的指南。这本书深入浅出地介绍了如何利用Java语言在智能手机和平板电脑上创建引人入胜的3D应用。Java3D是Java平台上的一种强大的...
金属非金属新材料行业前瞻研究系列:3D打印有望从导入期进入快速成长期(58页).pdf
例如,在手机设计阶段,设计师可以利用3D模型来测试不同的颜色、材质和形状组合,快速迭代设计,而无需制造实体原型。此外,这些模型也可用于游戏开发,让玩家能在虚拟世界中操作逼真的手机。教育领域中,学生可以...
3D打印技术与传统制造业相比,能够通过快速成型技术,优化产品结构、节约原材料和节省能源,极大提升制造效率,引领“设计引导制造”的新型理念。 3D打印技术自1986年被提出以来,已经历了三十多年的不断迭代与发展...
第11章 Android手机的3D世界
在手机游戏领域,3D设计和开发是一项技术密集型的工作,它涉及到许多复杂的编程技术和API。本资源包针对的就是这个主题,提供了“开发手机3D游戏的所有API”以及相关的详细源码,对于想要深入理解手机3D游戏开发的...
报告标题:“20210817-申万宏源-先临三维-830978-齿科3D数字化稀缺标的,甩掉包袱业绩进入快速释放期” 这篇报告聚焦于先临三维这家公司在齿科3D数字化领域的表现和发展前景。先临三维作为一家专注于3D打印技术的...
3DMAX快速布尔插件是针对3D建模软件3DS MAX设计的一款高效工具,它专为提升布尔运算效率而生。布尔运算在3D建模中是一项基础且重要的功能,通过结合、相交或剪切不同的几何体,能够创建出复杂的形状和结构。然而,...
“手机3D神器”是一款针对安卓平台开发的软件,它的核心功能是通过模拟和优化硬件资源,提升手机在处理大型3D游戏时的表现。其软件优化的核心在于图形处理单元(GPU)的模拟与性能提升,使得低配置的手机也能流畅...
手机3D游戏快速开发平台
康耐视的 3D-A5000 系列是专为捕获高分辨率 3D 图像设计的面阵扫描 3D 相机。它采用 3D LightBurst 技术,可以快速采集图像,以较大程度提高吞吐量。高分辨率 3D 图像配备业界领先的康耐视 3D 视觉工具,可为装配...
1. **3D打印**:3D打印是一种增材制造技术,它通过逐层叠加材料来创建三维物体。在本案例中,3D打印被用来制造手机支架,这涉及到3D设计、打印材料选择、打印参数设定等步骤。 2. **STL文件**:STL是“Standard ...
在手机上看3d,全球第一款手机上播放3d的软件。
【手机展台3D模型】是一种在数字设计领域中用于展示手机产品的三维视觉表现形式。在产品设计、广告宣传、虚拟现实(VR)体验以及线上展览等场景中,3D模型能够提供逼真的视觉效果,使观众能从多个角度、全方位地欣赏...
Direct3D快速开发框架是针对游戏开发和图形编程的一个高效工具,主要基于Microsoft DirectX 9.0版本。Direct3D是DirectX的一部分,它提供了一组API,允许开发者创建高性能的3D图形应用,包括游戏、模拟软件以及科学...
在3D游戏开发步步高系列课程的第一部分中,我们将深入探讨3D视频游戏开发的基础知识,涵盖了一...无论你是初学者还是有一定经验的开发者,这个3D游戏开发步步高系列课程都将带你进入一个充满无限可能的3D游戏开发世界。
3D加速是现代智能手机中的一项重要功能,特别是在游戏和图形密集型应用中,它能够显著提升设备的性能表现。在"u880手机"上开启3D加速,意味着用户可以享受到更加流畅、细腻的3D图形体验。3D加速的实现主要依赖于硬件...
本篇文章将详细解析“3DMAX快速瓦片屋顶铺设插件”,它是一款专为提高古风建筑建模效率而设计的强大工具。 首先,我们要理解3DS MAX的基本操作。3DS MAX提供了一个强大的建模环境,用户可以创建各种复杂的几何形状...