Actionscript 3 away3d在运行时更改3ds网格材质

Actionscript 3 away3d在运行时更改3ds网格材质,actionscript-3,away3d,Actionscript 3,Away3d,我正在试图弄清楚如何在鼠标单击后的运行时更改加载的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(); ma

我正在试图弄清楚如何在鼠标单击后的运行时更改加载的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();
}
因此,在所有这些之后,3ds对象被添加到场景中,初始材质(WireColorMaterial)应用于parser对象。但现在我想更改鼠标单击后的初始材质,因此:

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)
} 
单击鼠标后,视图中的内容不会发生任何更改,我的网格会像启用初始材质时一样旋转。但微量材料表明,新材料确实得到了应用


是否有其他方法可以做到这一点,或者是否有某种方法可以刷新场景以使其使用新材质?还是刷新视图?或者你应该再次解析我的网格?干杯。

我建议通过导入您的模型。这将允许您在可视化工具中预处理所有这些资产


我要么使用awd格式,要么将网格导出为3类。导出为AS3类还可以将数据与swf中的其他资产一起压缩,这是一个不错的小收获:)

我建议通过导入模型。这将允许您在可视化工具中预处理所有这些资产


我要么使用awd格式,要么将网格导出为3类。“导出为AS3”类还将使用swf中的其他资源压缩该数据,这是一个不错的小收获:)

此外,经过进一步研究,它可能只是.3ds object module中的一个bug。我刚刚检查了Obj对象导入,它工作正常。处理导入的obj网格时,行:
my_mesh.material=新的线框材质(0x000000)按预期工作。似乎在Away3D 3.5/3.6中导入3ds网格是一个棘手的问题。而且,经过进一步研究后,它可能只是.3ds对象模块中的一个问题。我刚刚检查了Obj对象导入,它工作正常。处理导入的obj网格时,行:
my_mesh.material=新的线框材质(0x000000)按预期工作。在Away3D 3.5/3.6中导入3ds网格似乎是个麻烦。