博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
翻译:为Forge Viewer的 模型贴材质
阅读量:6800 次
发布时间:2019-06-26

本文共 2366 字,大约阅读时间需要 7 分钟。

参考原文:

Autodesk Forge的小伙伴们经常会问到关于FBX文件在转换成Forge Viewer网页浏览格式的时候材质丢失的问题,参考以上两篇StackOverflow问题解答,现总结一下:

  1. Forge Model Derivative (模型数据提取和转换服务)在转换FBX的时候,没有提取材质内容。相关的需求已录入到开发部,但目前没有具体的时间表。

  2. 所以,如果想要在Forge Viewer里看到FBX的材质,需要利用Viewer的API做些后处理工作,自己贴材质。这里有一段参考代码,加载了一个名为 RefdFile_1.png 的材质,然后找到对象的fragment id,调用setMaterial贴上材质。

var attenuationVertexShader =`  varying vec2 vUv;  varying vec3 vPosition;  void main() {    vUv = uv;    vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);    gl_Position = projectionMatrix * mvPosition;  }  ` ;var attenuationFragmentShader = `  varying vec2 vUv;  uniform sampler2D checkerboard;  void main() {    gl_FragColor = texture2D(checkerboard, vec2 (vUv.x * 0.1263, vUv.y * 0.166)) ;  }` ;var dbId =4 ;var fragId =0 ;var texturePath ="/RefdFile_1.png" ;var material =null ;oViewer =new Autodesk.Viewing.Private.GuiViewer3D ($("#viewer") [0], {}) ; // With toolbarAutodesk.Viewing.Initializer (options, function () {    oViewer.initialize () ;    oViewer.addEventListener (Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function (event) {        oViewer.fitToView (true) ;        setTimeout (function () { oViewer.autocam.setHomeViewFrom (oViewer.navigation.getCamera ()) ; }, 1000) ;        setTimeout (createTexture, 500) ;    }) ;    oViewer.setGroundReflection (false) ;    oViewer.setGroundShadow (false) ;    oViewer.load (myurn) ;}) ;function createTexture () {    var loader =new THREE.TextureLoader () ;    loader.load (texturePath, function (texture) {        texture.minFilter =THREE.LinearMipMapLinearFilter ; // THREE.LinearMipMapLinearFilter        texture.magFilter =THREE.LinearFilter ;        var uniforms ={            checkerboard: {                type: 't',                value: texture            }        } ;        material =new THREE.ShaderMaterial ({          uniforms: uniforms,          vertexShader: attenuationVertexShader,          fragmentShader: attenuationFragmentShader,          side: THREE.DoubleSide        }) ;        oViewer.impl.matman ().removeMaterial ('shaderMaterial') ;        oViewer.impl.matman ().addMaterial ('shaderMaterial', material, true) ;        var floor_mesh_render =oViewer.impl.getRenderProxy (oViewer.model, fragId) ;        oViewer.model.getFragmentList ().setMaterial (fragId, material) ;        oViewer.impl.invalidate (true) ;    }) ;}

此案例在没有贴材质之前,这个电路板的主平面是单一的色调。

图片描述

贴完材质后,是这样的:

图片描述

转载地址:http://bsywl.baihongyu.com/

你可能感兴趣的文章
.NET批量大数据插入性能分析及比较
查看>>
字符串基本操作以及内存函数
查看>>
How to provide highlighting with Spring data elasticsearch
查看>>
MongoDB 游标
查看>>
java多线程体系
查看>>
用C#修改系统区域和语言设置
查看>>
如何使用Flexbox和CSS Grid,实现高效布局
查看>>
即将搭载人工智能芯片的华为Mate10,究竟会为业界带来什么?
查看>>
Linux在应用层读写寄存器的方法。。。
查看>>
区分execl与system——应用程序中执行命令
查看>>
Android实现登录小demo
查看>>
AgentWeb是基于Android WebView一个功能完善小型浏览器库
查看>>
电商网站的支付接入该怎么做呢
查看>>
5G超密集组网驱动光模块市场爆发
查看>>
Openstack组件部署 — Overview和前期环境准备
查看>>
开放数据中心联盟推8个云计算应用模型
查看>>
学习数据分析的“里程碑”是什么?
查看>>
零点之战!探访阿里巴巴8大技术专家,提前揭秘2017双11关键技术
查看>>
国家开发银行统一软件环境USE解决方案
查看>>
数据科学与DevOps之间的差距还有救吗?
查看>>