Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 0.学前说明

  • 1.Vue+Three.js基础

  • 2.场景搭建Three+Blender

  • 3.渲染效果提升(材质光照)

    • 1. 光照、环境贴图
    • 2. 环境贴图hdr格式
    • 3. 天空盒全景图作为背景
    • 4. threejs深度冲突
    • 5. 标准网格材质(金属)
    • 6. 物理网格材质(玻璃)
    • 7. dat.gui辅助调试物理材质
      • 8. dat.gui辅助调试光照参数
      • 9. dat.gui调节平行光照射角度
    • 4.渲染性能、模型压缩

    • 5.封装、进度条、切视角

    • js 3D可视化
    • 3.渲染效果提升(材质光照)
    郭隆邦
    2024-03-13
    目录

    7. dat.gui辅助调试物理材质

    # dat.gui辅助调试物理材质

    上节课在threejs中给大家设置物理材质的时候,通过代码修改参数,然后测试,比较麻烦,可以通过dat.gui.js可视化方式调节材质属性。

    # 引入gui.js库

    你可以npm安装dat.gui,也可以直接使用threejs扩展库中准备好的库lil-gui.module.min.js。

    文件node_modules,**three/examples/jsm/libs/**目录,你可以找到一个文件lil-gui.module.min.js。

    // 引入dat.gui.js的一个类GUI
    import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js';
    

    gihtub地址:https://github.com/dataarts/dat.gui

    npm地址:https://www.npmjs.com/package/dat.gui

    # 创建一个GUI对象

    创建一个GUI对象,你可以看到浏览器右上角多了一个交互界面,GUI本质上就是一个前端js库。

    // 实例化一个gui对象
    const gui = new GUI();
    

    # .domElement:改变GUI界面默认的style属性

    通过.domElement属性可以获取gui界面的HTML元素,那就意味着你可以改变默认的style样式,比如位置、宽度等。

    //改变交互界面style属性
    gui.domElement.style.right = '0px';
    gui.domElement.style.width = '500px';
    gui.domElement.style.fontSize = '16px';
    

    # .add()方法

    执行gui的.add()方法可以快速创建一个UI交互界面,比如一个拖动条,可以用来改变一个JavaScript对象属性的属性值。

    格式:.add(控制对象,对象具体属性,其他参数)

    const spheremesh = gltf.scene.getObjectByName('球体')
    const mat = spheremesh.material;//材质对象
    gui.add(mat, 'metalness', 0, 1);
    gui.add(mat, 'roughness', 0, 1);
    gui.add(mat, 'envMapIntensity', 0, 5);
    gui.add(mat, 'transmission', 0, 1);
    gui.add(mat, 'ior', 1, 2.333);  
    

    # .onChange()方法

    .onChange()方法可以监听属性值的变化,当属性值变化时候,可以触发某些代码执行。

    gui.addColor(mat, 'color').onChange(function(value){
            spheremesh.material.color.set(value);
    });
    

    # 交互界面命名

    gui.add(mat, 'metalness', 0, 1).name('金属度');
    gui.add(mat, 'roughness', 0, 1).name('粗糙度');
    gui.add(mat, 'envMapIntensity', 0, 5).name('环境贴图系数');
    gui.add(mat, 'transmission', 0, 1).name('透射度');
    gui.add(mat, 'ior', 1, 2.333).name('折射率');
    gui.addColor(mat, 'color').onChange(function(value){
        spheremesh.material.color.set(value);
    }).name('颜色');
    
    6. 物理网格材质(玻璃)
    8. dat.gui辅助调试光照参数

    ← 6. 物理网格材质(玻璃) 8. dat.gui辅助调试光照参数→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式