【发布时间】:2012-07-17 13:11:56
【问题描述】:
我试图弄清楚如何在鼠标单击后在运行时更改加载的 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)。但是现在我想改变鼠标点击后的初始材质,所以:
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 吗?干杯。
【问题讨论】:
-
另外,经过进一步研究,这可能是 .3ds 对象模块中的一个错误。我刚刚检查了 Obj 对象导入,它工作得很好。处理导入的 obj 网格时,该行:
my_mesh.material = new WireframeMaterial(0x000000);按预期工作。似乎在 Away3D 3.5/3.6 中导入 3ds 网格就像蚁丘一样有缺陷。
标签: actionscript-3 away3d