通常情况下,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);
}
以下是去掉材质前后的对比。