我试图弄清楚如何在鼠标单击后在运行时更改加载的 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 吗?干杯。