1

我试图弄清楚如何在鼠标单击后在运行时更改加载的 3ds 对象/网格上的材质。(Away3D 3.5/3.6)

使用 Loader3D 加载 3ds 对象:

//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();
}

因此,在所有这些之后,3ds 对象被添加到场景中,初始材质 (WireColorMaterial) 与解析器对象一起应用。但是现在我想改变鼠标点击后的初始材质,所以:

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 回答