threejs中gui的用法总结

gui

为了能够快速地搭建three.js的交互ui,官方提供了一个GUI组件,通过简单的语法学习就能够使用。

下面我们就来学习如何使用

用法一

首先声明一个对象,这个对象设置获取一个交互UI的get和set的方法回调

var propsLocal = {
	 get Enabled() {
        return renderer.localClippingEnabled;
      },
    set Enabled(v) {
        renderer.localClippingEnabled = v;
      }
}

然后就就可以使用GUI来进行生成交互UI组件
生成一个panel组件版,然后将组件的对象添加到这个组件版,完成之后就能够生成一个交互界面了。

 var gui = new GUI(),
 folderLocal = gui.addFolder("Local Clipping")
 folderLocal.add(propsLocal, "Enabled");

在这里插入图片描述
是不是很简单?

  • 拉动条
    不仅可以生成按钮,也可以生成拉动条。
    同样是上面同一个例子
  var gui = new GUI(),
    folderLocal = gui.addFolder("Local Clipping"),
    propsLocal = {
      get Enabled() {
        return renderer.value;
      },
      set Enabled(v) {
        renderer.value = v;
      }
    }
      folderLocal.add(propsLocal, "Enabled", 0.3, 1.25);// 后面多的2个参数是拉动条的最大和最小值

在这里插入图片描述

  • 生成按钮

    // 设置一个回调
    let params = {
    	btn :function (){
    	// do someThing
    	}
    }
     var gui = new GUI(),
    folderLocal = gui.addFolder("btn")
     folderLocal.add(params , "btn");
    
  • 下拉表

    var gui = new GUI(),
    var statesFolder = gui.addFolder( 'States' );
    // 默认值设置
    var dropdown= { state: 'Walking' };
    //选项
    var states = [ 'Idle', 'Walking', 'Running', 'Dance', 'Death', 'Sitting', 'Standing' ];
    // 添加
    var clipCtrl = statesFolder.add( dropdown, 'state' ).options( states );
    // 设置点击事件
    clipCtrl.onChange( function () {
    				// do something
    } );
    

    效果图
    在这里插入图片描述

用法二

本质都是一样的,只是写法不一样而已。

var gui = new GUI();
var planeX = gui.addFolder("Local Clipping");
   planeX
     .add(params.planeX, "displayHelper")
     .onChange(v => (planeHelpers[0].visible = v));// 按钮
     
  planeX
     .add(params.planeX, "constant")
     .min(-1)
     .max(1)
     .onChange(d => (planes[0].constant = d));// 拖动条
在 Vue3 项目中集成 Three.js 并使用其 GUI 功能,可以通过以下步骤实现: ### 1. 安装依赖 首先,确保项目中已经安装了 `three` 和 `dat.gui` 相关的依赖包。可以通过以下命令进行安装: ```bash npm install three npm install three/examples/jsm/libs/dat.gui.module ``` ### 2. 创建 Three.js 场景 在 Vue3 的组件中,可以通过 `onMounted` 生命周期钩子来初始化 Three.js 场景,并将 GUI 集成到场景中。 ### 3. 集成 GUI 引入 `GUI` 模块并创建 GUI 实例,用于动态调整场景中的对象属性。 #### 示例代码: ```vue <template> <div> <canvas ref="canvasElement"></canvas> </div> </template> <script setup> import { ref, onMounted } from 'vue' import * as THREE from 'three' import { GUI } from 'three/examples/jsm/libs/dat.gui.module' const canvasElement = ref(null) onMounted(() => { // 初始化场景、相机、渲染器 const scene = new THREE.Scene() const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000) const renderer = new THREE.WebGLRenderer({ canvas: canvasElement.value }) renderer.setSize(window.innerWidth, window.innerHeight) // 创建一个立方体 const geometry = new THREE.BoxGeometry() const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }) const cube = new THREE.Mesh(geometry, material) scene.add(cube) // 设置相机位置 camera.position.z = 5 // 创建 GUI const gui = new GUI() gui.domElement.style.position = 'absolute' gui.domElement.style.top = '0px' gui.domElement.style.right = '0px' // 添加 position 控制器 const positionFolder = gui.addFolder('Position') positionFolder.add(cube.position, 'x', -10, 10, 0.01) positionFolder.add(cube.position, 'y', -10, 10, 0.01) positionFolder.add(cube.position, 'z', -10, 10, 0.01) positionFolder.open() // 动画循环 function animate() { requestAnimationFrame(animate) renderer.render(scene, camera) } animate() }) </script> <style scoped> canvas { display: block; width: 100%; height: 100%; } </style> ``` ### 4. 解释关键代码 - **GUI 实例化**:通过 `new GUI()` 创建一个 GUI 实例。 - **添加控制器**:使用 `add()` 方法为对象的属性添加控制器,例如 `cube.position.x`。 - **设置 GUI 位置**:通过修改 `gui.domElement.style` 设置 GUI 的位置。 ### 5. 注意事项 - **性能优化**:GUI 控制器可能会对性能产生一定影响,尤其是在大规模场景中,建议在调试时启用。 - **响应式布局**:确保 GUI 的位置与 Vue3 的响应式布局兼容,避免遮挡其他元素。 通过上述步骤,可以在 Vue3 项目中成功集成 Three.js 并使用其 GUI 功能。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值