Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)

前期文章中我们完成了创建第一个场景、添加轨道控制器的功能,接下来我们继续阐述其他的功能,本篇文章中主要讲述如何应用lil-GUI调试开发3D效果,在开始具体流程和步骤之前,请先查看之前的内容,因为该功能必须在前期内容的基础上才可完成。

目录

一、GUI界面概述

二、GUI使用

1.导入GUI

2.创建一个对象

3.创建GUI

4.应用GUI

5.控制立方体位置

(1)直接显示法

(2)最大值、最小值法

(3)添加folder法

(4)添加change事件


一、GUI界面概述

GUI,全称Graphical User Interface,即图形化用户界面,它是众多程序,特别是上位机软件中不可或缺的一部分。通过GUI,用户只需进行简单的点击和操作,就能轻松调用底层的复杂代码,极大地提升了使用的便捷性和结果的直观展示性。

当我们完成了底层代码的开发后,接下来就可以着手构建一个GUI界面了。这个界面就像是一个精美的包装,它能够将我们的程序功能以更加友好、直观的方式呈现给用户。用户通过GUI,可以轻松地与程序进行交互,无需深入了解底层的复杂逻辑。

二、GUI使用

本章中只阐述GUI的相关内容,之前的代码就不在进行书写,接下来我们在代码中使用GUI

1.导入GUI

//导入lil.gui
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min'

2.创建一个对象

这里我们应用显示全屏和退出全屏的案例来展示如何使用改功能

//创建显示全屏和退出全屏对象
const eventObj = ref({
  //显示全屏
  showFullScreen: function () {
    document.body.requestFullscreen()
  },
  //退出全屏
  exitFullScreen: function () {
    document.exitFullscreen()
  }
})

3.创建GUI

//创建gui
  const gui = new GUI()

4.应用GUI

这里使用刚刚创建的显示全屏,退出全屏为例

//添加控制器--显示全屏
  gui.add(eventObj.value, 'showFullScreen').name('全屏')
  //添加控制器--退出全屏
  gui.add(eventObj.value, 'exitFullScreen').name('退出全屏')

以下是实现效果,我们可以看见右上角有个controls控制按钮

5.控制立方体位置

 在上面代码的基础上我们继续添加,这里拿控制立方体为例,我们具体的写法分了几种,下面一一介绍

(1)直接显示法

//控制立方体的位置---(-20,20)是范围--第一种写法
  // gui.add(cube.position, 'x', -20, 20).name('立方体x轴')

(2)最大值、最小值法

//第二种写法---移动范围最小值是-20,最大值是20,步长为1
  // gui.add(cube.position, 'x').min(-20).max(20).step(1).name('立方体x轴')

(3)添加folder法

添加folder写法可以将其作为一个文件夹,能添加多个控制器

//添加folder写法
  const foldder = gui.addFolder('立方体')
  foldder.add(cube.position, 'x').min(-20).max(20).step(1).name('x轴')
  //y轴位置
  foldder.add(cube.position, 'y').min(-20).max(20).step(1).name('y轴')
  //z轴位置
  foldder.add(cube.position, 'z').min(-20).max(20).step(1).name('z轴')

(4)添加change事件

 这里还可以继续在后面添加change事件,以便于实时更新立方体位置

//x轴位置---onChange事件是立即更新的,onFinishChange事件是鼠标松开更新的
  foldder
    .add(cube.position, 'x')
    .min(-20)
    .max(20)
    .step(1)
    .name('x轴')
    .onChange(val => {
      console.log('立方体x轴位置改变', val)
    })
  //y轴位置
  foldder
    .add(cube.position, 'y')
    .min(-20)
    .max(20)
    .step(1)
    .name('y轴')
    .onFinishChange(val => {
      console.log('立方体y轴位置改变', val)
    })
  //z轴位置
  foldder.add(cube.position, 'z').min(-20).max(20).step(1).name('z轴')

(5)调节立方体颜色

 根据上述的方法,我们这里在做个能通过GUI面板快速调节立方体颜色的小功能,首先我们先设置父元素材质为线框模式

//设置父元素材质为线框模式
  parentMaterial.wireframe = true

然后利用gui改变改变父元素材质

//改变父元素材质--判断是布尔值
  gui.add(parentMaterial, 'wireframe').name('父元素材质')

如果也想要改变子元素的材质,先定义一个颜色对象

//改变子元素材质
  let colorParams = {
    cubeColor: '#0x00ff00'
  }

 然后也是同样的利用GUI

//给立方体添加颜色
  gui
    .addColor(colorParams, 'cubeColor')
    .name('立方体颜色')
    .onChange(val => {
      console.log(val, 'vvvv')
      //点击颜色修改cube的颜色
      cube.material.color.set(val)
    })

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

采用海豚调度器+Doris开发数仓保姆级教程(满满是踩坑干货细节,持续更新)

一、采用海豚调度器Doris开发平替CDH Hdfs Yarn Hive Oozie的理由。 海豚调度器Doris离线数仓方案与CDH Hive在多个方面存在显著差异,以下是对这两种方案的对比分析: 1. 架构复杂性 CDH Hive:基于Hadoop生态,组件众多&#…

50.【8】BUUCTF WEB HardSql

进入靶场 随便输输 上order by ????????,被过滤了,继续找其他也被过滤的关键字 #,-- -,-- 都不行,尝试其他特殊字符后发现and,union,select,空格,都被过滤了 如下 我就不知…

Redis 3.2.1在Win10系统上的安装教程

诸神缄默不语-个人CSDN博文目录 这个文件可以跟我要,也可以从官网下载:https://github.com/MicrosoftArchive/redis/releases 这个是微软以前维护的Windows版Redis安装包,如果想要比较新的版本可以从别人维护的项目里下(https://…

mac配置 iTerm2 使用lrzsz与服务器传输文件

mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…

9.7 visual studio 搭建yolov10的onnx的预测(c++)

1.环境配置 在进行onnx预测前,需要搭建的环境如下: 1.opencv环境的配置,可参考博客:9.2 c搭建opencv环境-CSDN博客 2.libtorch环境的配置,可参考博客:9.4 visualStudio 2022 配置 cuda 和 torch (c)-CSDN博客 3.cuda环境的配置…

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…

STM32-keil安装时遇到的一些问题以及解决方案

前言: 本人项目需要使用到STM32,故需配置keil 5,在配置时遇到了以下问题,并找到相应的解决方案,希望能够为遇到相同问题的道友提供一些解决思路 1、提示缺少(missing)version 5编译器 step1:找…

C语言结构体漫谈:从平凡中见不平凡

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文《1》 结构体的两种声明一、结构…

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式(如 WPS 文档或表格)。然而,可以通过几种间接的方式实现这一目标,确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案: ​ 导出…

LeetCode | 栈与队列:算法入门到进阶的全解析

栈和队列作为最基础的数据结构,不仅简单直观,还在算法世界中扮演着举足轻重的角色。无论是处理括号匹配问题、滑动窗口、还是实现先进先出的任务调度,栈与队列都是核心工具。 在本篇文章中,我们将以 LeetCode 中的经典题目为例&am…

得物App再迎开放日,全流程体验正品查验鉴别

近日,得物App超级品质保障中心再度迎来了开放日活动。近60位得物App的用户与粉丝齐聚超级品质保障中心,全流程体验正品查验鉴别。开放日当天,参与者有机会近距离观察得物App的商品质检区、鉴别区、收发流转区、实验室和正品库等关键功能区&am…

docker 部署 MantisBT

1. docker 安装MantisBT docker pull vimagick/mantisbt:latest 2.先运行实例,复制配置文件 docker run -p 8084:80 --name mantisbt -d vimagick/mantisbt:latest 3. 复制所需要配置文件到本地路径 docker cp mantisbt:/var/www/html/config/config_inc.php.…

【大语言模型】ACL2024论文-38 从信息瓶颈视角有效过滤检索增强生成中的噪声

【大语言模型】ACL2024论文-38 从信息瓶颈视角有效过滤检索增强生成中的噪声 目录 文章目录 【大语言模型】ACL2024论文-38 从信息瓶颈视角有效过滤检索增强生成中的噪声目录后记 《An Information Bottleneck Perspective for Effective Noise Filtering on Retrieval-Augment…

《火焰烟雾检测开源神经网络模型:智能防火的科技护盾》

一、火灾威胁与检测需求 火灾,始终是高悬在人类社会头顶的 “达摩克利斯之剑”,其带来的灾难后果触目惊心。根据国家消防救援局发布的数据,仅在 2024 年上半年,全国就接报火灾达 31.7 万起 ,造成了 1173 人不幸遇难&am…

深入探究Linux树状目录结构

Linux 作为一款广泛使用的开源操作系统,其目录结构采用了树状设计,这种结构清晰、有条理,便于用户和系统进行文件管理与操作。 一、根目录(/) 根目录是整个 Linux 文件系统的起始点,就像一棵大树的根部&…

【C语言4】数组:一维数组、二维数组、变长数组及数组的练习题

文章目录 前言一、数组的概念二、一维数组2.1. 数组的创建和初始化2.2. 数组的类型2.3. 一维数组的下标2.4. 数组元素的打印和输入2.5. 一维数组在内存中的存储2.6. sizeof 计算数组元素个数 三、二维数组3.1. 二维数组的概念3.1. 二维数组的创建与初始化3.2. 二维数组的下标3.…

图论1-问题 C: 算法7-6:图的遍历——广度优先搜索

题目描述 广度优先搜索遍历类似于树的按层次遍历的过程。其过程为:假设从图中的某顶点v出发,在访问了v之后依次访问v的各个未曾被访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先…

【今日分享】人工智能加速发现能源新材料的结构与性能

人工智能与材料国际学术会议(ICAIM)workshop9是由来自宁夏大学材料与新能源学院副院长王海龙教授及马薇副教授、杜鑫老师组成,他们将以“人工智能加速发现新能源新材料的结构与性能”为主题开展研讨工作,欢迎对该主题感兴趣的专家学者携稿加入。 loadin…

Docker拉取hello-world失败超时解决方法(配置多个镜源)

问题图片 解决方案 //创建目录 sudo mkdir -p /etc/docker //写入加速器配置 sudo tee /etc/docker/daemon.json <<-EOF "registry-mirrors": "https://do.nark.eu.org", "https://dc.j8.work", "https://docker.m.daocloud.io"…

[操作系统] 深入理解操作系统的概念及定位

概念 任何计算机系统都包含⼀个基本的程序集合&#xff0c;称为操作系统(OS)。 其核心功能如图片所示&#xff0c;包括&#xff1a; 内核 (Kernel)&#xff1a; 内核是操作系统的核心部分&#xff0c;被认为是狭义上的操作系统&#xff0c;直接与硬件打交道。负责进程管理、内…