原文地址链接
Mascot Capsule v3支持在轮廓上使用多个纹理,然而,重复纹理却是不支持的,例如,你不能在一个纹理上再添加另一个纹理。请记住,在Mascot Capsule v3里,所有纹理都是以256x256的图象存放在堆里的,并不考虑原始大小。
下面我将创建一个使用两个独立纹理的MIDlet
下载源代码
在这个立方体上使用了两个独立的纹理当一个轮廓从3D authoring程序中导出时,一个BAC文件被创建。这个BAC文件是一个文本文件,它存储了轮廓数据。文件里的这些数据可以用PAC工具或手工编辑。
在Mascot Capsule v3 API中,这个BAC文件不能以轮廓的形式被装载和使用。因此,我们得使用Micro3DConv_sony_EriCSSon工具冲BAC文件中创建一个mbac文件。在使用MIDlet以前,可以使用PVMicro工具预览轮廓的最终效果。
如果我们关注BAC文件,我们可以看纹理坐标说明书,接下来我们可以知道如何如何使用这些坐标来创建轮廓。
( TextureCoords
( f2 0.0005 0.9995 )
( f2 0.9995 0.9995 )
( f2 0.9995 0.0005 )
( f2 0.0005 0.0005 )
) ; TextureCoords
( Polygons; number of faces: 6
; mat vertex indices texture coord. indices
( face 0 ( i4 0 1 2 3 ) ( i4 2 3 0 1 ) )
( face 0 ( i4 4 5 6 7 ) ( i4 2 1 0 3 ) )
( face 0 ( i4 8 9 10 11 ) ( i4 2 1 0 3 ) )
( face 0 ( i4 12 13 14 15 ) ( i4 2 3 0 1 ) )
( face 0 ( i4 16 17 18 19 ) ( i4 0 3 2 1 ) )
( face 1 ( i4 20 21 22 23 ) ( i4 1 0 3 2 ) )
)
在上面的表中,除了最后一个值为一以外,所有面的”mat”(材质)值为零,就是这个值为一的材质的纹理与其他的不同。
当我们装载这些纹理信息时,必须使用一个数组来存储这些信息。下面是实现的代码:
cubeFigure = new Figure("/cube.mbac");
textures = new Texture[] {new Texture("/image.bmp", true),
new Texture("/se_turtle.bmp", true)};
cubeFigure.setTexture(textures);
g3d.renderFigure(cubeFigure, 0, 0, layout, effect);
为了之前的想法,我们必须把两张图象合并成一张图象。在这个例子中,两张96x96的图象被合并成一张192x96的图象。请注意:在一个轮廓中使用一张图片里的两种不同的纹理是可能实现的。
下面的纹理坐标是用来控制在一个面显示乌龟图象的。
PRivate int[] tex = {
192, 0, 96, 0, 96, 96, 192, 96,
0, 96, 96, 96, 96, 0, 0, 0,
0, 96, 96, 96, 95, 0, 0, 0,
0, 96, 96, 96, 95, 0, 0, 0,
0, 96, 96, 96, 95, 0, 0, 0,
0, 96, 96, 96, 95, 0, 0, 0};
上面提到的一些工具可以在这里下载。
(出处:http://www.knowsky.com)