从3dsmax导出Dae模型到papervision3D

从外部的三维软件,如3dsmax导入模型到papervision3D,下面,让我们熟悉一下这个流程。
http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
在3dsmax里建立一个箱体。



长 20
宽 100
高 30
如图所示:


这里我们用的都是3dsmax默认的单位。也就是英尺。
我们这里需要注意的是它的轴向:xyz和它对应的长宽高。


输出为box.DAE文件。
选择默认的设置,OK即可。
我们在Flex中把物体导入进去
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:myCanvas3D="myCanvas3D.*" applicationComplete="init();">
	<mx:Script>
		<![CDATA[
			import org.papervision3d.objects.primitives.Plane;
			import org.papervision3d.materials.WireframeMaterial;
			import org.papervision3d.lights.PointLight3D;
			import org.papervision3d.materials.ColorMaterial;
			import org.papervision3d.cameras.FreeCamera3D;
			import org.papervision3d.objects.primitives.Sphere;
			import org.papervision3d.materials.BitmapFileMaterial;
			import org.papervision3d.materials.utils.MaterialsList;
			import org.papervision3d.objects.parsers.DAE;
			import org.papervision3d.cameras.Camera3D;
			import org.papervision3d.render.BasicRenderEngine;
			import org.papervision3d.scenes.Scene3D;
			import org.papervision3d.view.Viewport3D;
			import org.papervision3d.events.FileLoadEvent;
			
			private var viewport:Viewport3D;
			private var scene:Scene3D;
			private var render:BasicRenderEngine;
			private var camera:FreeCamera3D;
			
			private var light:PointLight3D;
			
			private var box:DAE;
			private var plane:Plane;
			
			private function init():void{
				viewport=new Viewport3D(500,400);
				scene=new Scene3D();
				render=new BasicRenderEngine();
				camera=new FreeCamera3D(2,100);
				plane=new Plane(null,100,100,10,10);
				//light=new PointLight3D(true);
				//light.x=0;
				//light.y=50;
				//light.z=-80;
				//scene.addChild(light);
				
				box=new DAE(true);
				box.load("assets/box.DAE",new MaterialsList( {all:new WireframeMaterial()} ) );

				
				box.addEventListener(FileLoadEvent.LOAD_COMPLETE,boxonloaded);
								
				camera.x=20;
				camera.y=00;
				camera.z=-20;
				mycanvas.canvas.addChild(viewport);
			}
			private function boxonloaded(evt:FileLoadEvent):void{
				scene.addChild(plane);
				scene.addChild(box);
				camera.lookAt(box);
				render.renderScene(scene,camera,viewport);	
			}

		]]>
	</mx:Script>
	<myCanvas3D:Canvas3D id="mycanvas" width="500" height="400" backgroundColor="0x000000"/>
</mx:Application>

运行,看到如下的结果:


简单的解释一下,这里我们看到我们的箱体是立着的,我们多做了一个plane物体来作为参考,我们的相机在我们的Pv3d系统的位置为:
camera.x=20;
camera.y=0;
camera.z=-20;
我们的plane物体的长、宽、高都为100,那么箱体的长度和plane物体的长度是一样的。也就是说我们从3dsmax里导入的物体的长度在Pv3d系统的单位长度是一致的!这个很关键。
好,单位确定后我们就来探讨坐标轴的问题。
展开好UV,贴好材质,如图,我们通过材质来示意轴向。


重新输出文件为:boxm.DAE
我们重新把文件导入到pv3d系统去,运行,我们看到是黑色的箱体,看不到材质,我们打开编辑boxm.DAE文件,把
<init_from>../sceneassets/images/outUV.jpg</init_from>


改为
<init_from>outUV.jpg</init_from>

因为我们的贴图outUV.jpg与我们的文件boxm.DAE是在同一个目录下。
再把材质代码改为:
box.load("assets/boxm.DAE",null );

只要路径对了,
boxm.DAE文件自动配置好贴图。
最终贴出来效果为


在max的显示为:


最终我们得出的结论是:
3dsmax与pv3d的系统单位一致,
只要把Y轴与Z轴交换一下就达到一致效果。

http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
最终,我们可以导入一个游戏人物角色了,Papervision 3D导入游戏人物!很激愤人心的事情啊!这里我们用了一个最终幻想的人物头部模型。
结果如图


下一步,我们会走的更远!

你可能感兴趣的:(游戏,qq,Flex)