通常情况下,Forge的模型提取和转换服务 将把模型的材质也转换,在Forge Viewer加载模型时,材质也将显示出来。材质会占用一定的显存,造成对于某些超大的模型,显示和漫游的响应延迟。

而有些时候,一个模型管理应用主要关心模型形体和其属性,问对材质要求度不高。如果能不渲染材质,那么对于模型查看的体验会有一些改善。

Forge Viewer的API对象中,有个matman(),它是管理所有缺省材质和额外附加材质的集合,因此,可以遍历其材质列表,一一设置为期望的简单颜色或灰度。可以记下原材质的信息,用于恢复材质状态。

注意:如果对象的显示定义只是简单的颜色,而非材质,则这个方法不起作用。

//保存所有材质信息
var oldTextures = new Array();
//保存所有颜色信息
var oldColors = new Array();

//去掉材质
function hideTexture() {
    //获取材质列表
    var mats = NOP_VIEWER.impl.matman()._materials;
    //定义一个颜色
    var grey = new THREE.Color(0.5, 0.5, 0.5);
    //遍历材质
    for (index in mats) {
        m = mats[index];

        //保存材质信息
        oldTextures[index] = m.map;
        oldColors[index] = m.color;

        //设置材质为空,并用定义的颜色
        m.map = null;
        m.color = grey;
        //告知Viewer刷新
        m.needsUpdate = true; 
    }
    NOP_VIEWER.impl.invalidate(true, true, false);
}

//恢复材质
function showTexture()
{
    //获取材质列表
    var mats = NOP_VIEWER.impl.matman()._materials;
    //遍历材质
    for (index in mats) {
        m = mats[index];
 

        m.map = oldTextures[index];
        m.color = oldColors[index];;
        m.needsUpdate = true; 
    }
    NOP_VIEWER.impl.invalidate(true, true, false);

}

以下是去掉材质前后的对比。

图片描述
图片描述


梁晓冬
527 声望301 粉丝

现就职于Autodesk软件中国有限公司,主要负责Autodesk产品API和APS云服务的推广和传播工作。


引用和评论

0 条评论