Away3D在运行时加载并显示.obj

时间:2014-03-08 13:23:07

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

我第一次使用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文件

4 个答案:

答案 0 :(得分:1)

我一直有这个问题用3D。

如果其他一切似乎都有效,那么你的模型可能是(0,0,0)而你的相机是(0,0,0)(里面)。

将加载的模型移动到说(0,0,10)并让你的相机看起来是矢量(0,0,10)。

答案 1 :(得分:0)

你的物体上有一些物质,这是可见的吗? 还可以尝试移动,旋转,缩放物体和移动相机。

首先添加一些行元素"球体等"看看你的立场是否正确。然后将对象添加到其中。

答案 2 :(得分:0)

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

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.
        }
    }

答案 3 :(得分:0)

您必须使用view.render()呈现视图,以显示任何内容。