资讯专栏INFORMATION COLUMN

在 Forge Viewer 里展示/隐藏构件材质

Dean / 1184人阅读

摘要:对于大多数的模型文档都可以透过服务提取转换在里渲染构件外观时所需的材质及贴图。所以我们可以透过它遍历所有材质,找出我们想隐藏贴图的那些材质,将它的颜色设置为灰色,同时也可以透过它将隐藏贴图的材质回复。

这篇文章来自 Autodesk ADN 的梁晓冬,以下以我简称。

对于大多数的模型文档都可以透过 Autodesk Forge Model Derivative 服务提取、转换在 Viewer 里渲染(Render)构件外观时所需的材质(Material)及贴图(Texture)。在 Viewer 里渲染这些材质是会耗损计算机内存(Memory)的,但有时候我们观注的是构件的几何信息,贴图(Texture)反倒是可以被忽略的,但这要怎么做到呢?

在 Viewer API 里有一个函数matman()可以获取 Viewer 的材质管理员,透过它可以取得所有 Viewer 自带和自订的材质。所以我们可以透过它遍历所有材质,找出我们想隐藏贴图的那些材质,将它的颜色设置为灰色,同时也可以透过它将隐藏贴图的材质回复。

注:这个例子没办法在没贴图的材质上有作用;这范例在浏览器 Console 测试过,且使用默认的 Viewer 实例 NOP_VIEWER。

//store textures data
var oldTextures = new Array();
//store color data
var oldColors = new Array();

//remove texture
function hideTexture() {

    //get materials list
    var mats = NOP_VIEWER.impl.matman()._materials;

    //define a grey color
    var grey = new THREE.Color(0.5, 0.5, 0.5);

    //iterate materials 
    for (index in mats) {

        //index is the material name (unique string in the list)
        m = mats[index];

        //store texture info
        oldTextures[index] = m.map;
        oldColors[index] = m.color;

        //set the material without texture and the grey color
        m.map = null;
        m.color = grey;

        //mark the material dirty. The viewer will refresh
        m.needsUpdate = true; 
    }

    //refresh the scene
    NOP_VIEWER.impl.invalidate(true, true, false);
}

//show texture
function showTexture()
{
    //get materials list
    var mats = NOP_VIEWER.impl.matman()._materials;

    //iterate materials 
    for (index in mats) {

        //index is the material name (unique string in the list)

        m = mats[index];
 
       //restore
        m.map = oldTextures[index];
        m.color = oldColors[index];;
        m.needsUpdate = true; 
    }

    //refresh the scene

    NOP_VIEWER.impl.invalidate(true, true, false);

}

在隐藏贴图前的样子:

在移除贴图后的样子:

上述的例子我没有在 Shader Material 上测试,或许有更有的办法可行,我建议各位朋友们可以参考我同事发布的其他博客:

Using Shaders to Generate Dynamic Textures in the Viewer API

Ace Editor for Three.js ShaderMaterials in the Forge Viewer

Forge Viewer Custom Shaders - Part 1

Forge Viewer Custom Shaders - Part 2

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88904.html

相关文章

  • 「翻译」Forge Viewer上实作简易的模型版本比较

    摘要:现在让我们修改这个示例让他可以展示两个同项目但不同版号的模型及。示例执行结果如下这边是这个比较模型的括展代码英文原文 showImg(https://segmentfault.com/img/bVOmjp?w=1542&h=925); 熟悉 BIM360 Team 的朋友可能知道他有一个很牛的模型文档版本比较的功能,但如果模型是放在 Google 云盘或是百度云盘上有可能做到吗? Au...

    JowayYoung 评论0 收藏0
  • Forge Viewer 加入自订义线

    摘要:可能有许多原因你想在里加入自订义的线型,例如显示线框几何视觉化包围箱或者其他你想带给使用者的视觉回馈。下面是我传写的一个例子,他可以在选重构件后在场景里用自定义线型描绘它的包围箱,在线示例可以参考这里 showImg(https://segmentfault.com/img/bVVaUx?w=1794&h=930); 这篇文章的原著是 Autodesk AND 的 Philippe L...

    zilu 评论0 收藏0
  • 自定义 Forge Viewer 右键菜单(Context Menu)

    摘要:前阵子有些圈的朋友们都在询问同一个问题要怎么在的自带右键菜单上添加自定义项目或是只显示自订义项目以下将针对在自带右键菜单上添加自定义项目和只显示自订义项目的右键菜单进行说明。 前阵子有些 Autodesk Forge 圈的朋友们都在询问同一个问题『要怎么在 Viewer 的自带右键菜单上添加自定义项目或是只显示自订义项目』~ 以下将针对『在自带右键菜单上添加自定义项目』和『只显示自订义...

    Harriet666 评论0 收藏0
  • Autodesk Forge Viewer 信息本地化技术分析

    摘要:默认情况下,是英文环境,调取的是的资源其实无需翻译。但是,如前面提到的,语言包只是包含了部分常规字串的翻译,如果遇到没有包含的常规字串怎么办呢例如,本例中的语言包并没有对,进行翻译,所以即使切换了语言,它们仍旧是英文。 注:本文是个人调试分析所得,非官方文档,请酌情选用参考。文中分析的数据由https://extract.autodesk.io转换下载而来。 谈到信息本地化,个人觉得包...

    littleGrow 评论0 收藏0
  • Forge Viewer v3.2 摄像头新事件 CAMERA_TRANSITION_COMPLET

    摘要:需要知道的摄像头是不是已经不再移动或转动了的朋友有福了,自此版号开始开始引入一个叫的事件,当摄像头的完成后就会被触发,它的使用方法如下注册事件调用摄像头聚焦的目前已知适用的情境回到默认视角相关的变动使摄像头聚焦在构件上怖满检视整个模型透过回 需要知道 Forge Viewer 的摄像头是不是已经不再移动或转动了的朋友有福了,自此版号 3.2开始 Viewer 开始引入一个叫 Autod...

    frolc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<