BIM轻量化之路(三)-threejs加载GLTF

一、web端加载模型文件

前面获取gltf文件就可以使用threejs进行展示了。Threejs官网上有很多加载各种模型格式的例子,其中也包括load gltf,
地址:https://threejs.org/examples/?q=load#webgl_loader_gltf

var loader = new GLTFLoader().setPath( 'models/gltf/DamagedHelmet/glTF/' );
loader.load( 'DamagedHelmet.gltf', function ( gltf ) {//加载文件
   gltf.scene.traverse( function ( child ) {//遍历子元素
      if ( child.isMesh ) {
         roughnessMipmapper.generateMipmaps( child.material );
      }
   } );
   scene.add( gltf.scene );//添加到场景
   roughnessMipmapper.dispose();
   render();//重新渲染场景
} );

只要将文件路径修改为我们的文件路径就可以加载进来了
加载效果如下:
在这里插入图片描述
示例代码下载:https://download.csdn.net/download/nihaozhe/12922363

二、threejs

1.threejs教程

要进行threejs的开发首先要了解其原理和功能,它是基于webgl发展起来的一套web3d引擎,webgl因为接口复杂需要对计算机图形了解比较深入才能随心使用,入门门槛比较高,threejs对webgl进行了封装,开发者不需要了解图形渲染的细节,只需要调用其接口就可实现简单的3d展示,threejs 各个版本比较混乱,存在不向下兼容的情况,开发需要注意这一点,最好使用新版本。
网上有很多教程
教程:http://www.hewebgl.com/article/articledir/1
郭老师的教程:http://www.yanhuangxueyuan.com/
学习完后大概了解什么是场景、摄像机、光、渲染器等基本概念,这个和unity的开发很像,但是threejs没有辅助的开发工具,需要通过代码来调试调整。
谷歌浏览器有个可以查看threejs的插件Three.js Developer Tools,可以在谷歌市场上下载安装。
可查看当前场景灯光、元素等信息

2.示例代码说明

完整加载代码如下(示例):

<script>
    if (!Detector.webgl) Detector.addGetWebGLMessage();//判断浏览器是否支持webgl
    let scene = new THREE.Scene();//初始化场景
    let camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 2000000);//初始化摄像机
    camera.position.set(0, 101120, 101120);
    camera.lookAt(new THREE.Vector3(0, 0, 0));
    let renderer = new THREE.WebGLRenderer({
        canvas: document.getElementById("canvas-model-view"),
        antialias: true, //设置抗锯齿
        alpha: true, //背景透明
        autoClear: true,
        logarithmicDepthBuffer: true
    });
    renderer.setClearColor(0xD6E0EB, 0.0); //设置渲染器背景颜色
    renderer.setSize(window.innerWidth, window.innerHeight);

    //四个方向的平行光
    let directionalLight = new THREE.DirectionalLight(0xffffff, .8);
    directionalLight.position.set(1, 0, 0);
    let directionalLight3 = new THREE.DirectionalLight(0xffffff, .8);
    directionalLight3.position.set(-1, 0, 0);
    let directionalLight1 = new THREE.DirectionalLight(0xffffff, .8);
    directionalLight1.position.set(0, 0, 1);
    let directionalLight2 = new THREE.DirectionalLight(0xffffff, .8);
    directionalLight2.position.set(0, 0, -1);
    scene.add(directionalLight);
    scene.add(directionalLight1);
    scene.add(directionalLight2);
    scene.add(directionalLight3);

    //环境光
    let ambient = new THREE.AmbientLight(0xffffff, .6);
    scene.add(ambient);

    //加载模型文件
    let gLTFLoader = new THREE.GLTFLoader()
    let dracoLoader = new THREE.DRACOLoader();
    dracoLoader.setDecoderPath('examples/js/libs/draco/gltf/');
    dracoLoader.setDecoderConfig({type: 'js'});
    gLTFLoader.setDRACOLoader(dracoLoader);
    gLTFLoader.load('model/model.gltf', function (obj) {
        console.log(obj);
        scene.add(obj.scene);
        document.getElementById('loading').style.display = 'none';
        render();
    }, function (xhr) {
        console.log((xhr.loaded / xhr.total * 100) + '% loaded');
    }, function (error) {
        console.log('load error!' + error.getWebGLErrorMessage());
    })
    console.log(THREE.REVISION);

    function render() {
        renderer.render(scene, camera);//执行渲染操作
    }

    render();
    //操作控制
    let controls = new THREE.OrbitControls(camera, renderer.domElement);//创建控件对象
    controls.addEventListener('change', render);//监听鼠标、键盘事件
    //辅助线
    let axisHelper = new THREE.AxisHelper(50050);
    scene.add(axisHelper);
</script>

需要注意的几点:

  • render 的加载可以指定渲染的dom,需要获取其长宽,这个可以帮助我们在页面的某一个局部进行渲染
  • 加载过来的模型原点对应的是revit中设定的项目基点,需要一定的旋转才能达到和revit一致
  • revit软件中内置单位是英寸,转换过来的模型展示比较大,需要调正好摄像机的初始位置
  • 因为使用的draco压缩,需要使用threejs的DRACOLoader.js进行解码
  • 平行光只能设定方向,没有距离表示

总结

以上是threejs加载模型的方法,但是没有达到可以使用程度,如刨切、漫游、定位、测量等功能,需要进一步的开发。

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Three.js是一个十分流行的WebGL渲染库,它可以用于在Web上创建各种各样的3D场景与动画。同时,Three.js也可以被用来加载BIM模型,让建筑师和工程师们获得全新的建筑设计和构建体验。 Three.js支持多种BIM格式,例如IFC、RVT和DWG等,使用Three.js加载BIM可以让用户在操作和构建场景时获得更为流畅的体验和更为生动的视觉效果。虽然BIM模型往往相较于其他模型更为复杂,但是Three.js以其高效优化和可定制化的特点,可以轻松地将模型呈现在Web页面上。 用户可以利用Three.js强大的工具箱,例如可拖拽的场景、可旋转的物体、自由视角等功能,让BIM模型在Web上愈发立体、真实。同时,用户还可以轻松地将BIM模型与其他的数据集成,例如地图数据、传感器数据和空气质量数据等等,以帮助设计师做出更加科学、可持续的设计决策。 总之,使用Three.js加载BIM模型不仅可以为用户构建更为真实、更为可视化的设计模型,更可以帮助设计师们在构建过程中得到更全面、更精准的数据支持,以满足日益严格的市场需求和客户要求。 ### 回答2: Three.js是一款现代的JavaScript 3D引擎,可以用于在Web浏览器中创建高品质的动态3D场景,因此它在加载BIM(建筑信息模型)方面也非常有用。 首先,BIM是一种数字建模技术,被用于建筑和基础设施项目的设计,建造和运行过程中的信息管理。因此,使用Three.js加载和展示BIM数据可以帮助设计师和建筑师更好地理解和管理整个建筑过程。 在使用Three.js加载BIM时,需要首先将BIM数据转换为可见的3D模型。这可以通过转换软件来完成,例如Revit和Navisworks等软件可以将BIM数据转换为3D格式,例如OBJ,FBX,GLTF等。 一旦有了可见的3D模型,就可以使用Three.js将模型加载进Web浏览器中,并附加材质,光源和动画等特性。此外,Three.js还可以帮助创建交互式场景,例如平移和缩放模型,或者添加文本,图表和注释等信息。 使用Three.js加载BIM可以提高建筑流程的效率,减少错误,并为设计师和建筑师提供更多的增值服务。 ### 回答3: Three.js是一款基于WebGL的JavaScript 3D图形库,它提供了高度抽象的对象、灵活的渲染管线和易于操作的场景,是Web 3D开发中的一种强大工具。而BIM(Building Information Modeling,建筑信息模型)是一种通过维数字建模将建筑信息整合于一体,以提高建筑设计、施工、维护过程的效率和精度。 在Three.js中,可以通过加载BIM文件模型,让建筑模型变得更加生动、直观。Three.js支持的BIM文件格式主要有IFC、rvt等,并且可以通过插件的方式实现加载其他的格式。 Three.js可以支持解析IFC文件,对维物体进行转换,生成渲染维模型。加载BIM文件可以通过将模型文件直接导入到项目中,利用Three.js提供的API将BIM模型加载到场景中。可以通过设置材质、贴图、光源、相机等参数来实现丰富的效果,从而方便地展示模型细节。 总之,利用Three.js加载BIM文件,可以让建筑模型更直观、动态,从而方便用户快速了解建筑设计;同时通过Three.js的灵活性,开发人员可以自由地调整模型的渲染效果,满足不同需求。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值