m3g学习笔记7,m3g note 7

m3g学习笔记7,m3g note 7

///////////////////
    note 7
///////////////////
1.立即模式
1.1.什么是立即模式
我们在M3G中渲染一个组、节点或者是一个子网面就被称为立即模式
1.2.立即模式的方法
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)
所有方法还有另外一个共同点,就是它们都需要一个Transform类,这个类描述了模型从本地到3D世界空间的转换信息。也就是说一个Transform类可以创建一个渲染。(你可以在内存中保存一个太空船的Mesh,但是可以使用不同的Transform矩阵多次渲染它,这样就可以获得很多不同的太空船)
1.3.立即模式的问题
立即模式渲染的问题是在渲染之前你必须管理更多的对象,因为你没有一个便利的World类,它存储了所有照相机、背景和照明信息。因此现在你需要手动控制的是,使用一个Background对象的视口缓冲器、场景照明信息和照相机。
2.背景(Background)
2.1.使用背景(Background)
这个Background类保存了很多极好的信息,例如用来清除屏幕的背景颜色和绘制背景的图片
2.2.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;
// 初始化我们的背景
public void initBackground() {
 back = new Background();
 back.setColor(0);
}
public void draw(Grahics g) {
 // 这里绑定你的Graphics3D对象
 // 现在,简单的清除屏幕
 g3d.clear(back);
}
3.光照(Lighting)补充
你需要手动控制的另外一件事是光照。你需要创建灯,并根据Transform矩阵把它们放置在3D空间中。这是你在Graphics3D类中完成的所有事情,可以使用如下的方法:
addLight ( Light light, Transform transform)
setLight (int index, Light light, Transform transform)
resetLights ()
它们是相当明了的,所以我将快速的讲解它。你应该已经知道在M3G中如何创建一个Light,这在过去的两篇指南中已经讲解过。第一个方法仅仅是添加一个灯到内部的灯数组中,数组中的元素将在以后被使用。通过提供一个实际的Light类和它Transform增加一个灯。这个Transform矩阵决定了这个Light将被放置的位置。addLight方法返回当前光的索引,为了在以后通过setLight方法改变Light这个索引值是需要知道的,setLight方法需要一个特定的索引值。它需要改变的灯的索引值和新的Light和Transform。通过调用Light为null的setLight方法,可以将那个灯从数组中删除。最后一个方法是一个简单的清除方法,它清除Graphics3D相关的所有灯。

One thought on “m3g学习笔记7,m3g note 7

  1. wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold
    wow gold -229459998817963

Leave a Reply

Your email address will not be published. Required fields are marked *