• three.js中的3D模型分层显示(分类型显示);使用dat.gui控制three.js中的3D模型分层显示;dat.gui调用一次但是渲染了多个


     

    效果如上,就是可以通过dat.gui控制3D模型中仅仅显示管线或者是仅仅显示除了管线之外的模型。

    1.在模型导入的时候就按照类型(分层的类别标识) 区别开(我这里是按照是否是管线)

    这里是new THREE.Object3D();必须的否则会报错,以及后面再控制显隐的时候需要这个对象中的visible去控制哦

    1. // 加载3D模型
    2. const loader = new GLTFLoader();
    3. loader.load('/models/donghua.glb', (gltf) => {
    4. this.model = gltf.scene;
    5. this.model.children.forEach(element => {
    6. if (element.name.includes('Line')) {
    7. //将是管线的网格对象放在一起
    8. this.lineListModel.push(element)
    9. } else {
    10. //将不是管线的网格对象放在一起
    11. this.otherListModel.push(element)
    12. }
    13. });
    14. // 分层显示 这里是创建一个3d对象
    15. this.lineModel = new THREE.Object3D();
    16. this.otherModel = new THREE.Object3D();
    17. // 将类型为管网的网格对象添加到object3D对象中
    18. for (var i = 0; i < this.lineListModel.length; i++) {
    19. this.lineModel.add(this.lineListModel[i]);
    20. }
    21. // 将类型是其他的网格对象添加到object3D对象中
    22. for (var j = 0; j < this.otherListModel.length; j++) {
    23. this.otherModel.add(this.otherListModel[j]);
    24. }
    25. // 将层级添加到场景中
    26. this.scene.add(this.lineModel);
    27. this.scene.add(this.otherModel);

    2.在mounted当中去初始化gui控件, 在beforeDestroy中去销毁,否则的话会出现多个gui控件

    document.querySelector('.dg')是默认的类名可以直接去修改gui控件的样式

    在修改显隐的时候let that = this很重要,之前一直修改不了 打印3D对象一直都是undefined,原来是this的原因

    1. mounted() {
    2. // 应用图形界面更改变量
    3. this.gui = new dat.GUI();
    4. const controls = {
    5. "仅显示管线": true,
    6. "仅显示除管线之外的其他": true,
    7. "全部显示": true,
    8. };
    9. let that = this
    10. this.gui.add(controls, '仅显示管线').onChange(function (value) {
    11. that.lineModel.visible=value
    12. });
    13. this.gui.add(controls, '仅显示除管线之外的其他').onChange(function (value) {
    14. that.otherModel.visible=value
    15. });
    16. this.gui.add(controls, '全部显示').onChange(function (value) {
    17. that.lineModel.visible=value
    18. that.otherModel.visible=value
    19. });
    20. const guiDOM = document.querySelector('.dg');
    21. guiDOM.style.position = 'absolute';
    22. guiDOM.style.top = '80px';
    23. guiDOM.style.left = '50px';
    24. guiDOM.style.zIndex = 9999;
    25. },
    26. beforeDestroy() {
    27. // 销毁GUI实例
    28. this.gui.destroy();
    29. }

    然后就收工啦~

  • 相关阅读:
    10.1 调试事件读取寄存器
    07-python条件语句
    Java.lang.Character类中isUpperCase()方法具有什么功能呢?
    indexDB & localForage
    【计算机网络】高级IO初步理解
    Python魔法:20个让你编程事半功倍的奇淫技巧(建议收藏)
    Protocol Buffers 3 学习
    深入了解 GPU 互联技术——NVLINK
    《探索数据结构之美:如何高效实现哈希表》
    网站如何优化
  • 原文地址:https://blog.csdn.net/killerdoubie/article/details/133076598