指南目标
是时候学习一下Sandy里的高级特性了,我们将看到Sandy导入来自其它软件模型。Sandy可以导入3DS Max格式的文件和Collada格式的文件。我们有两种方法从外部软件导入3D模型。
1、你可以用Sandy解析原始的文件格式。
2、你可以把你的模型导出为一个AS3的类,然后在你的代码里实例化它。
这两个途径是有区别的,这就是为什么我决定要分为两个不同的指南(Part1和Part2)的原因。第一个分(这个指南)将展示怎么使用导出为AS格式的模型。为了导出模型要做一些额外的工作,但这样做Sandy的代码更容易编写。第一部份(Part2)将导入一个3DS格式的文件,你将会看到这样做需要写多一些代码。
怎么做?
设立3DS Max
我们要先设置一下3DS MAX因为我们这个指南中将用到一个生成AS文件的插件。这个插件可以在shirotokoro找到,我在这里附上它的地址:script3ds.rar
基本上你需要做三件事情:
1、为3DS MAX安装插件。
2、创建一个3D 模型。
3、导出模型为AS格式。
最后你会得到一个.as 文件表示你的模型。在我们的例子我建了一个荼壶并导出为Teiera.as文件。你会以下载的代码里找到这个文件。
代码:
package {
import flash.display.Sprite;
import flash.events.*;
import sandy.core.Scene3D;
import sandy.core.data.*;
import sandy.core.scenegraph.*;
import sandy.materials.*;
import sandy.materials.attributes.*;
import sandy.primitive.*;
import sandy.parser.*;
public class Example006 extends Sprite {
private var scene:Scene3D;
private var camera:Camera3D;
private var pot:Teiera;
public function Example006() {
camera = new Camera3D( 300, 300 );
camera.y = 30;
camera.z = -200;
var root:Group = createScene();
scene = new Scene3D( "scene", this, camera, root );
addEventListener( Event.ENTER_FRAME, enterFrameHandler );
}
private function createScene():Group {
var g:Group = new Group("myGroup");
var materialAttr:MaterialAttributes = new MaterialAttributes(new LightAttributes( true, 0.2 ) );
var material:Material = new ColorMaterial( 0xE0F87E, 0.9, materialAttr);
material.lightingEnable = true;
var app:Appearance = new Appearance( material);
pot = new Teiera("pot");
pot.appearance = app;
pot.enableBackFaceCulling = false;
g.addChild( pot );
return g;
}
private function enterFrameHandler( event : Event ) : void {
pot.pan +=5;
scene.render();
}
}
}
分析代码
首先我们要定义一些变量来保持我们的3D对象。因此我们在定义了Camera3D和Scene3D后定义了一个变量。
private var scene:Scene3D;
private var camera:Camera3D;
private var pot:Teiera;
然后我们要对这些类进行实例化,我们在createScene()方法中完成了这一事情:
pot = new Teiera("pot");
实际上我们在创建这个类之前我定义了一个皮肤应用到我们的荼壶上。我们现在还没有学习到怎么导入*.jpg材质,所以现在我们将只用“hard coded”的方式来创建材质。
var materialAttr:MaterialAttributes = new MaterialAttributes(new LightAttributes( true, 0.2 ) );
var material:Material = new ColorMaterial( 0xE0F87E, 0.9, materialAttr);
material.lightingEnable = true;
var app:Appearance = new Appearance( material);
使用lightingEnable 告诉渲染引擎为3D模型使用灯光效果。
别忘了给荼壶就用appearance和设置enableBackFaceCulling 属性 为无效。
pot.appearance = app;
pot.enableBackFaceCulling = false;
g.addChild( pot );
看看最后的效果:
http://www.flashsandy.org/_media/tutorials/3.0/example006.swf