分享
 
 
 

3D编程指南第三部分:粒子系统和立即模式渲染(1)

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

介绍

欢迎来到M3G指南的第三部分!今天我将介绍如何控制整个渲染过程(立即渲染),以及如何创建一个精密的粒子系统。此外,这里有一些链接,万一你感到迷惑就可以参考:

首先,或许也是最重要的,就是在索尼爱立信开发者世界上专业的移动Java 3D网络区。其次,假如你碰到困难,就去索尼爱立信移动Java 3D论坛。对于其他的任何情况,使用索尼爱立信开发者世界网络门户,在那里你可以找到你的问题的答案,并且可以了解到更多。

这篇文章的目的是向你展示,如何根据不同的变换在不同的时间内渲染同一个对象。这被称作立即模式。你将会看到这种模式对很多事情是多么的强大。另外,这篇文章将是深入更高级的指南的基础,因为从现在开始,我们几乎只使用立即模式进行渲染。

因为文中的代码是用来演示使用的,所以它不是最优化的,并且它也没有包括所有可能发生的错误。稍后将会有更高级的话题。

你应该了解的

在你开始阅读这篇指南以前,你应该已经阅读过先前的两篇,并且已经对基本的M3G功能有一个稍微扎实的领会。

 第一部分:快速进入移动JAVA 3D编程世界

 第二部分:光的3D理论与定位

保留模式和立即模式渲染

保留模式是当你使用一个世界它含有的全部信息——包括照相机和灯光渲染整个世界时使用的模式。这是一种相当受限制的模式,因为我们几乎总是希望根据不同的变换多次绘制一个模型,而不是调用整个场景图像。所以,我们在M3G中渲染一个组、节点或者是一个子网面就被称为立即模式。这些是立即模式的方法:

render ( Node node, Transform transform)

render ( VertexBuffer vertices, IndexBuffer triangles, Appearance appearance, Transform transform)

render ( VertexBuffer vertices, IndexBuffer triangles, Appearance appearance, Transform transform, int scope)

像你看到的一样,三个方法都需要某种顶点数据:Node和VertexBuffer/IndexBuffer。一个Node可能主要是一个场景图像的任意部分,甚至一个世界也可以被认为是一个Node。通常你会给第一个渲染的方法传递一个Mesh或者一个Group。VertexBuffer,我们在第二篇指南中已经谈论过,它是描述3D空间中一个模型的网面数据的集合。最后的两个方法也需要Appearance类,以明白如何显示网面数据。在这篇指南中我们只使用第一个方法,向你展示立即模式是如何工作的。

所有方法还有另外一个共同点,就是它们都需要一个Transform类,这个类描述了模型从本地到3D世界空间的转换信息。请记住,我们在最后一篇指南中讨论它。另外需要记住的一件事时,你希望的渲染的大多数模型都是可变化的。这就意味着它们拥有自己的内部变换矩阵。然而,立即模式渲染忽略所有的这种转换信息,只使用为这个方法提供的Transform矩阵。这是非常便利的,因为你可以在内存中保存一个太空船的Mesh,但是可以使用不同的Transform矩阵多次渲染它,这样就可以获得很多不同的太空船。当我们开始设计粒子引擎时,你将会看到实际使用的这种方法。

那是全部吗?

立即模式渲染的问题是在渲染之前你必须治理更多的对象,因为你没有一个便利的World类,它存储了所有照相机、背景和照明信息。因此现在你需要手动控制的是,使用一个Background对象的视口缓冲器、场景照明信息和照相机。

背景(Background)

为了使用立即模式渲染,我们必须手动清除视口,这样为下一次绘制周期做预备。这个操作既可以在一个渲染循环之前也可以在它之后完成,但是它必须在你绑定Graphics3D对象之后和释放Graphics3D之前完成。M3G使用一个Background类来帮助你完成这个操作。这个Background类保存了很多极好的信息,例如用来清除屏幕的背景颜色和绘制背景的图片。它是很有用的,因为你可以使用一个很大的图片作为背景,但是可以只显示它的一些小块和部分就似乎你走来走去。例如,你可以在你的视野之内拥有一个大PNG,然后当玩家在游戏世界中移动时,你就可以移动背景的修剪区域来显示视野的其它部分。然而你必须明白,使用大的PNG不仅仅十分慢,而且内存效率很低。下面是Background类的最重要的方法:

setColor (int ARGB)

setCrop (int cropX, int cropY, int width, int height)

setImageMode (int modeX, int modeY)

setImage ( Image2D image)

让我们一个一个考虑它们。第一个方法是最简单和最常用的。它以0xAARRGGBB形式设置背景的颜色——这个颜色是在屏幕被清除时使用的。那么例如一个鲜红的颜色就是0xFFFF0000。很多人设置这个颜色为黑色或者天空的颜色。然而,默认颜色是白色。

setCrop方法是非常有用的,假如你正在使用一个背景图片作为一个背景显示。利用这个方法,你可以决定整个背景图片的哪个部分被渲染。这里有一些非凡的情况需要考虑,像修剪区域跨出背景图片的边界之外。这是就要用到第三个方法。它决定了对在源图片之外的像素将会发生什么。有两种可用的模式:REPEAT和BORDER。REPEAT意味着这个图片无限的重复自己,就像是一个平铺的纹理;而BORDER意味着在源图片以外的像素将使用setColor方法提供的背景颜色进行着色。一个很好的事情就是你可以分开决定x轴和y轴的图像模式动作。这就意味着,你可以在x轴(水平方向)环绕一个背景图片,而在y轴(垂直方向)保持静止。

最后一个方法,setImage是用来决定哪一个图片将会被用作背景。你可以为这个方法提供一个null参数关闭背景图像渲染,只使用背景颜色填充屏幕。这是默认的模式。不过请注重,图片是Image2D必须的,并且不是标准的Java ME平台图片。可是从一个Image创建一个Image2D并不是很难,你既可以使用十分有用的Loader类直接将它指向一个.PNG图像,也可以仅仅使用Image2D的构造方法,如下所示:

Image2D (int format, java.lang.Object image)

它是一个十分简单的构造方法,首先它获得图片的格式(在99% 的情况下,它是Image2D.RGBA或者Image2D.RGB,这依靠于你是否使用透明度),然后就是获得图片自身。第二个参数应该是你的Image类。所以,你将转换一个正常的Java ME平台图片为一个Image2D对象:

Image img = Image.createImage("/myimage.png");

Image2D img2d = new Image2D(Image2D.RGBA, img);

极其轻易!因此Image2D没有任何威胁,它仅仅是M3G系统使用的一个Image封装。

现在,你可能迫不及待了,想知道在你渲染任何对象之前,如何使用Background类清除背景。它是非常轻易的,这是第一个向你展示方法的代码片断:

// 背景

Background back = null;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有