1

マウスクリック後の実行時に、ロードされた3dsオブジェクト/メッシュのマテリアルを変更する方法を理解しようとしています。(Away3D 3.5 / 3.6)

3dsオブジェクトはLoader3Dでロードされます:

//global mesh variable and view3d
var my_mesh:Mesh;
var view:View3D = new View3D();    

//creating a parser with initial material
var max3ds_parser:Max3DS = new Max3DS();
max3ds_parser.material = new WireColorMaterial(0xFF0000);

var loader:Loader3D = new Loader3D();
loader.addEventListener(Loader3DEvent.ON_SUCCESS, onSuccess);
loader.loadGeometry("myMesh.3ds", max3ds_parser);

addChild(view);
addEventListener(Event.ENTER_FRAME, onEnterFrameRenderScene);

function onSuccess(e:Loader3DEvent):void{
    my_mesh = Mesh(e.loader.handle);
    view.scene.addChild(my_mesh)
}
function onEnterFrameRenderScene(e:Event):void{
    my_mesh.rotationY += 15;
    view.render();
}

したがって、このすべての後に、パーサーオブジェクトで適用された初期マテリアル(WireColorMaterial)を使用して3dsオブジェクトがシーンに追加されます。しかし、マウスクリック後に最初のマテリアルを変更したいので、次のようにします。

stage.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent):void{
    //start FAIL here:
    my_mesh.material = new WireframeMaterial(0x000000);
    //end FAIL
    trace("clicked!");
    trace(my_mesh.material)
} 

マウスをクリックすると、ビューで何も変更されません。my_meshは、最初のマテリアルをオンにしたときと同じように回転します。しかし、微量材料は、新しい材料が実際に適用されたことを示しています。

これを行う他の方法はありますか、それとも新しい素材を使用するようにシーンを更新する何らかの方法がありますか?または、ビューを更新しますか?または、どういうわけかmy_meshをもう一度解析する必要がありますか?乾杯。

4

1 に答える 1

1

Prefab3D経由でモデルをインポートすることをお勧めします。これにより、ビジュアル ツールでこれらすべてのアセットを前処理できます。

awd 形式を使用するか、メッシュを AS3 クラスとしてエクスポートします。AS3 クラスとしてエクスポートすると、swf 内の残りのアセットと一緒にそのデータも圧縮されます。ちょっとしたおまけです :)

于 2012-12-19T01:35:42.877 に答える