原文地址鏈接
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.49028c.com)
新聞熱點
疑難解答