查看: 1890|回复: 2
打印 上一主题 下一主题

Sandy3D应用指南——导入外部3D模型

[复制链接]

3795

主题

2

听众

5万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
53202
精华
32

活跃会员 优秀版主 推广达人 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2012-9-25 11:31:54 |只看该作者 |倒序浏览
指南目标
是时候学习一下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( ***e, 0.2 ) );
      var material:Material = new ColorMaterial( 0xE0F87E, 0.9, materialAttr);
      material.lightingEnable = ***e;
      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( ***e, 0.2 ) );
var material:Material = new ColorMaterial( 0xE0F87E, 0.9, materialAttr);
material.lightingEnable = ***e;
var app:Appearance = new Appearance( material);
使用lightingEnable  告诉渲染引擎为3D模型使用灯光效果。
别忘了给荼壶就用appearance和设置enableBackFaceCulling 属性 为无效。
pot.appearance = app;
pot.enableBackFaceCulling = false;
g.addChild( pot );
看看最后的效果:

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

3795

主题

2

听众

5万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
53202
精华
32

活跃会员 优秀版主 推广达人 突出贡献 荣誉管理 论坛元老

沙发
发表于 2012-9-25 11:51:56 |只看该作者

Sandy3D应用指南——导入外部3D模型2



Sandy3D中文类简介




Sandy3D应用指南——导入外部3D模型




Sandy3D应用指南——使用灯光




Sandy3D应用指南——在3D场景中移动物品




Sandy3D应用指南——使用摄像机
回复

使用道具 举报

3795

主题

2

听众

5万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
53202
精华
32

活跃会员 优秀版主 推广达人 突出贡献 荣誉管理 论坛元老

板凳
发表于 2012-9-25 11:52:03 |只看该作者

Sandy3D应用指南——导入外部3D模型2



Sandy3D中文类简介




Sandy3D应用指南——导入外部3D模型




Sandy3D应用指南——使用灯光




Sandy3D应用指南——在3D场景中移动物品




Sandy3D应用指南——使用摄像机
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-11 16:31 , Processed in 0.089159 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部