【问题标题】:away3d change 3ds mesh material on run-timeaway3d 在运行时更改 3ds 网格材质
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多