【Threejs学习】Dat.GUI 辅助调参工具

news2024/11/25 2:12:41

一、介绍

dat.GUI 辅助调参工具,是一个轻量级的图形用户界面库(GUI 组件),使用这个库可以很容易地创建出能够改变代码变量的界面组件。
image.png
github地址: https://github.com/dataarts/dat.gui

二、使用

1.使用cdn引入

cdnjs.com ——> dat.gui 复制地址
image.png

<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.9/dat.gui.min.js"></script>

完整示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- 引入dat.gui,对外全局暴露dat变量 -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.9/dat.gui.min.js"></script>
  <script>
  // 1.创建控制对象: 定义能够配置的各种属性
  const controlData = {
    rotationSpeed: 0.01, // 物体的旋转速度
    color: '#66ccff', // 物体的颜色
    wireframe: false, // 是否显示线框
    envMap: '无', // 材质选项
    visible: true, // 是否显示物体
    opacity: 1, // 物体透明度
  }
  // 2.创建dat实例
  const gui = new dat.GUI();
  // 3.创建类目
  const folder = gui.addFolder('配置')
  // 添加旋转速度:folder.add(控制对象, 属性名key, 最小值, 最大值, 步长)
  folder.add(controlData, "rotationSpeed", 0.01, 0.1, 0.01) // 添加旋转速度, 写法二:folder.add(controlData, "rotationSpeed").min(0.01).max(0.1).step(0.01)
  // 添加颜色
  folder.addColor(controlData, "color")
  // 添加下拉列表
  folder.add(controlData, "envMap", ['无', '全反射', '漫反射'])
  // 添加选择框
  folder.add(controlData, "wireframe")
  // 打开类目
  folder.open() 

  </script>
  
</body>
</html>

image.png

2.方法

2.1 数值参数控制

folder.add(object, attr, min, max, step)
写法一:
folder.add(控制对象, 属性名key, 最小值, 最大值, 步长)

folder.add(controlData, "rotationSpeed", 0.01, 0.1, 0.01)

写法二:
folder.add(控制对象, “属性名key”).min(最小值).max(最大值).step(步长)

folder.add(controlData, "rotationSpeed").min(0.01).max(0.1).step(0.01)
2.2 颜色参数控制

folder.addColor(object, attr)

folder.addColor(controlData, "color1")
2.3 下拉框参数控制

folder.add(object, attr, array/object)

folder.add(controlData, "envMap", ['无', '全反射', '漫反射'])
folder.add(controlData, "speed", { 'fast': 1, 'normal': 2 })
2.5 单选框参数控制

folder.add(object, attr)

folder.add(controlData, "wireframe")
……(查看文档)

3.结合项目使用

3.1 下载

npm install --save dat.gui

3.2 代码示例
<!-- dat.GUI -->
<template>
  <div id="guiContainer" ref="datGuiRef"></div>
</template>

<script setup lang="ts">
// 引入 dat.gui
import dat from 'dat.gui'
import { onMounted, ref, reactive, onUpdated } from 'vue'

const datGuiRef = ref()
// 创建控制对象
const controlData = reactive({
  rotationSpeed: 0.01, // 物体的旋转速度
  color: '#66ccff', // 物体的颜色
  wireframe: false, // 是否显示线框
  envMap: '无', // 材质选项
  visible: true, // 是否显示物体
  opacity: 3, // 物体透明度
})
// 创建实例
const gui = new dat.GUI({
  name: 'my gui',
  autoPlace: false,
})
gui.width = 300
gui.name = 'test'
const folder = gui.addFolder('几何体配置')
// 添加旋转速度:folder.add(控制对象, 属性名key, 最小值, 最大值, 步长)
folder.add(controlData, 'rotationSpeed', 0.01, 0.1, 0.02) // 添加旋转速度, 写法二:folder.add(controlData, "rotationSpeed").min(0.01).max(0.1).step(0.01)
// 添加颜色
folder.addColor(controlData, 'color')
// 添加下拉列表
folder.add(controlData, 'envMap', ['无', '全反射', '漫反射'])
// 添加选择框
folder.add(controlData, 'wireframe')
// 打开类目
folder.open()
const folder2 = gui.addFolder('其他配置')
folder2.add(controlData, 'visible')
folder2.open()
// dat.gui 位置
gui.domElement.style = 'position: absolute; top: 0; right: 0'

/* 
// 鼠标按下事件
gui.domElement.onmousedown = function (e) {
  const left = e.clientX - gui.domElement.offsetLeft
  const top = e.clientY - gui.domElement.offsetTop
  if (e.target.className === 'title') {
    document.onmousemove = function (event) {
      event = event || window.event
      if (event.offsetX < 0 || event.offsetY < 0) return
      gui.domElement.style.left = event.clientX - left + 'px'
      gui.domElement.style.top = event.clientY - top + 'px'
    }
  }
  // 鼠标抬起
  document.onmouseup = function () {
    document.onmousemove = null
    document.onmouseup = null
  }
  // e.preventDefault()
} */
onMounted(() => {
  document.getElementById('guiContainer')?.appendChild(gui.domElement)
})

defineExpose({
  controlData,
})
</script>
<style>
/* 颜色高度 */
.dg .c input[type='text'] {
  height: 100%;
}
/* 下拉选择字体 */
.dg .c select {
  color: #000000;
}
</style>
  

image.png

3.3 响应式添加dat.gui

在 onMounted 中添加dat.gui, 将vue中创建的dom实例与dat.gui绑定的实例进行关联

  // 将gui添加到页面中
  document.getElementById('container').appendChild(folder.domElement)
3.4 修改样式

设置了 f.domElement.id = “gui”,在style中添加样式

<style>
#gui {
  position: absolute;
  right: 0;
  width: 300px;
}
</style>

3.5 与threejs关联

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 SpringBoot+Vue的——陪玩平台

文章目录 前言1.项目类型2.技术栈介绍3.功能介绍4.项目亮点5.适用场景6.项目展示7.诚邀参与 前言 大家好&#xff0c;我是执手天涯&#xff0c;今天非常荣幸地向大家介绍一款备受瞩目的创新项目基于 SpringBootVue的——陪玩平台。这不仅仅是一个游戏社交平台&#xff0c;更是…

算法设计:实验三动态规划法

【实验目的】 应用动态规划算法思想求解矩阵连乘的顺序问题。 【实验要求】 应用动态规划算法的最优子结构性质和子问题重叠性质求解此问题。分析动态规划算法的基本思想&#xff0c;应用动态规划策略写出算法及相应的程序&#xff0c;求解此题。要读懂读透A[i,j]&…

stm32-SD卡实验

1. SD简介 SD卡&#xff0c;Secure Digital Card&#xff0c;称为安全数字卡&#xff08;安全数码卡&#xff09;。 SD卡系列主要有三种&#xff1a;SD卡(full size)、MiniSD卡和MicroSD卡&#xff08;原名 TF卡&#xff09;。 特点&#xff1a;容量大、高安全性、体积小、传…

threejs绘制带箭头的坐标系

效果图&#xff1a; ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9319baf1e01946b8919490704e97532a.pn 实现思路&#xff1a; AxesHelper实现坐标系&#xff0c;但是是没有箭头的&#xff1b;这个对象会显示三个彩色的箭头&#xff0c;这些箭头分别表示x, y, z轴…

Android Studio Koala下载并安装,测试helloworld.

1、下载&#xff1a; 下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 2、滚动条拉到近最后&#xff0c;各个系统的下载地址&#xff1a; 3、下载完成以后&#xff0c;我们双击运行安装&#xff1a; 如果有路径要修改&#xff0c;则修改下就可以了&a…

直播平台直播API集成之twitch篇

前言&#xff1a;     本篇我们来介绍如何使用twitch的直播API创建直播。 准备工作&#xff1a; 1、你首先得有个twitch账号&#xff1b; 2、创建twitch应用&#xff0c;主要是给自己的应用取名并配置授权回调地址&#xff08;可配多个&#xff09;&#xff0c;如下图所示&…

Ae基础概念与界面讲解

目录 Ae软件的用途 Ae界面介绍 预设 界面介绍 首选项概念 导入与导出 Ae软件的用途 Ae是一款专业特效合成软件&#xff0c;通过对收集到的素材进行数字化的编辑组合到一起&#xff0c;进行艺术性的再加工后得到的最终作品。 Ae界面介绍 画面中最显眼的图标是新建合成&am…

RoboCat: A Self-Improving Generalist Agent for Robotic Manipulation

发表时间&#xff1a;22 Dec 2023 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId4836882796542689281&noteId2413286807916664832 作者单位&#xff1a;Google DeepMind Motivation&#xff1a;受视觉和语言基础模型的最新进展的启发&#xff0c…

第三十九篇-TeslaP40+CosyVoice-安装

环境 系统&#xff1a;CentOS-7 CPU: 14C28T 内存&#xff1a;32G 显卡&#xff1a;Tesla P40 24G 驱动: 535 CUDA: 12.2克隆 git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git cd CosyVoicegit submodule update --init --recursive下载 Matcha-TTS cd…

DWF 支持的 TON 链 Telegram 免费宠物游戏 Gatto_game,推出 “Paws Up! 世界锦标赛”

TON 链在这轮牛市里无疑是一匹脱缰的黑马&#xff0c;创造了一个又一个爆款&#xff0c;为持有者带来了不菲的收益。 Gatto_game 是一款 TON链 Tamagotchi 电子宠物风格的 P2E web3 游戏。可以通过喂养升级&#xff0c;参加比赛赚取 $TON 或者 $GTON &#xff0c;或许就是下一个…

四大名著改编的ip大作,一个巨亏2亿,一个狂赚20亿!选择决定成败!

最近讨论热度比较高的当属《红楼梦》和《西游记》了 胡玫导演的《红楼梦之金玉良缘》耗费了18年的心血&#xff0c;投资了2个多亿 却仅仅只有600万票房&#xff0c;还被网友调侃称“一黛不如一黛” 而由《西游记》改编的游戏《黑神话悟空》&#xff0c;研发10年投资6亿&…

如祺出行发布首份中期业绩,总收入增长13.6%

8月28日&#xff0c;如祺出行发布2024年中期业绩公告。这是如祺出行于7月10日在港交所主板上市后发布的首份业绩公告。 业绩公告显示&#xff0c;2024年上半年如祺出行收入实现10.37亿元&#xff08;单位&#xff1a;人民币&#xff0c;下同&#xff09;、同比增长13.6%&#x…

Avalonia与WPF开发时的差异总结

1.一个控件绑定到另外一个控件的属性 WPF: <TextBox Height"30" Width"100" x:Name"tb"></TextBox><TextBlock Text"{Binding ElementNametb,PathText}" ></TextBlock>Avalonia: <TextBox Height"3…

梯度下降法求解线性回归

文章目录 线性回归损失函数平均绝对误差&#xff08;MAE&#xff09;均方误差&#xff08;MSE&#xff09; 最小二乘法最小二乘法代数推导最小二乘法矩阵推导 线性回归 Python 实现线性回归 scikit-learn 实现 梯度下降法梯度下降法的原理 梯度下降法求解线性回归 线性回归 线…

Java SpringBoot实战:如何构建学生档案管理系统实现信息管理

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

【ocr识别003】动物检疫合格证明单据OCR识别应用案例(已更新)

1.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 2.了解、学习OCR相关技术知识领域,结合日常的场景进行测试、总结。如本文的实践:以动物检疫合格证明单据识别为例,探索OCR文本推理应用示例场景。 3.有其他场景问题,欢迎留言或加微沟通。 文章目录 1.简要介绍2.`O…

【Qt窗口】—— 状态栏

目录 1.1 状态栏的创建 1.2 在状态栏中显示实时消息 1.3 在状态栏中显示永久消息 状态栏是应用程序中输出简要信息的区域。⼀般位于主窗口的最底部&#xff0c;⼀个窗⼝中最多只能有⼀个状态栏。在Qt中&#xff0c;状态栏是通过QStatusBar类来实现的。在状态栏中可以显示的消…

Navicat Premium 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开工具对话框2. 设置编辑器字体大小3. 设置查询表格字体大小 前言 Navicat Premium 自定义字体大小&#xff0c;统一设置为 Cascadia Code SemiBold &#xff0c;大小为 12 具体操作 【工具】>【选项】>【编…

内网渗透小知识

下载proxychains这个工具 在下面这里进行代理配置 然后再里面添加内网端口。在设置浏览器的代理&#xff0c;就可以通过内网访问内网资源 然后在浏览器中设置&#xff0c;设置socks后可以访问很多。 如果映射http的话只可以访问一个 然后如果在内网扫描不了IP的话使用上面的代…

AGI系列(8)零门槛信息抓取利器打造,免费自动化抓取推特上的热点内容

应该大家都或多或少的听说过 X/Twitter。它可不只是个普通的社交平台&#xff01;它还是个信息宝库&#xff0c;里面有各种有趣的内容&#xff0c;比如&#xff1a;想知道最新热点&#xff1f;想和全世界的人聊天&#xff1f;Twitter都能搞定&#xff01;它的搜索功能特别厉害&…