【问题标题】:Away3D load and display .obj at runtimeAway3D 在运行时加载和显示 .obj
【发布时间】:2014-04-11 18:27:32
【问题描述】:

我第一次使用 Away3D,但在运行时简单地加载 3D 模型时遇到了很大的困难。
我正在使用 AIR 4.0 和最新的 Away3D 库。 设置看起来不错,我可以编译没有错误!

我已经尝试了我在网上找到的所有方法,但我会避免你徒劳的尝试。 这是我最新的一个,展示模型缺少什么?它似乎正在根据痕迹加载,但我无法显示它!

如果有帮助,我可以展示我尝试过的其他方法,但我怀疑它不会!

package  {

//imports ...

public class Main extends MovieClip{

    private var view:View3D;
    private var scene:Scene3D;  
    private var cam:Camera3D;
    private var _loader:Loader3D;

    public function Main() {
        trace("Main()");

        initAway();
    }

    private function initAway():void
    {
        addChild(new AwayStats());

        view = new View3D();            
        scene = new Scene3D();
        cam = new Camera3D();

        view.scene = scene;
        view.camera = cam;
        view.camera.lookAt(new Vector3D());

        addChild(view);

        Parsers.enableAllBundled();     

        _loader = new Loader3D();
        _loader.load(new URLRequest('/assets/test.obj'));
        _loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onSceneResourceComplete);
        _loader.addEventListener(AssetEvent.ASSET_COMPLETE, onAssetComplete);

    }

    private function onAssetComplete(event:AssetEvent):void
    {
        trace("assetType = " + event.asset.assetType ); 
        /*
        OUTPUT:
        assetType = geometry
        assetType = mesh
        assetType = material
        assetType = material        
        */  
    }

    private function onSceneResourceComplete(event : LoaderEvent) : void {
        trace("loaded " + event.currentTarget);
        // OUTPUT: loaded [object Loader3D
        //view.scene.addChild(_loader); //not working
        var container : ObjectContainer3D = ObjectContainer3D(event.target);
        view.scene.addChild(container);

    }  

}

}

在 /assets 中有一个 .obj 和对应的 .mtl 文件

【问题讨论】:

  • 你设置好你的相机位置了吗?它是在代码的不同部分还是根本不存在?如果它位于 (0,0,0) 并且您也将 lookAt 运行到 (0,0,0),那么您可能已经破坏了您的视图矩阵。
  • 这是 atm 的代码。我确实在 lookAt 方法之前的某个时间点设置了一个凸轮位置,但它似乎没有什么不同,然后我又把它拿出来了。我会再试一次。所以你在 LoaderEvent 中的这段代码应该显示模型吗?谢谢回复顺便说一句
  • 刚试了,还是空场……
  • 我不知道你的库的细节,所以我不能在这里帮助你,我只是有一些想法要检查:)。你能在屏幕上渲染任何几何图形吗?

标签: actionscript-3 3d air away3d .obj


【解决方案1】:

我在 3D 中一直存在这个问题。

如果其他一切似乎都正常,那可能是您的模型位于 (0,0,0) 而您的相机位于 (0,0,0)(在其中)。

将您加载的模型移动到 (0,0,10) 并让您的相机查看向量 (0,0,10)。

【讨论】:

    【解决方案2】:

    您的对象上是否有一些可见的材料? 还可以尝试移动、旋转、缩放对象和移动相机。

    首先添加一些行元素“球体等”,看看你的位置是否正确。然后将您的对象添加到其中。

    【讨论】:

      【解决方案3】:

      试试这个,我总是这样做,它有效:

      private function onAssetComplete(event:AssetEvent):void
          {
              trace("assetType = " + event.asset.assetType ); 
              /*
              OUTPUT:
              assetType = geometry
              assetType = mesh
              assetType = material
              assetType = material        
              */  
              if (event.assetType == "mesh") {
                   var m:Mesh = event.asset as Mesh;
                   view.scene.addChild(m);
                   //If still your mesh is invisible, try scaling rotating moving it.
              }
          }
      

      【讨论】:

        【解决方案4】:

        您必须使用view.render() 渲染您的视图才能显示任何内容。

        【讨论】:

          猜你喜欢
          • 2015-10-13
          • 2018-03-16
          • 1970-01-01
          • 2011-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-15
          相关资源
          最近更新 更多