当前位置: 首页 > news >正文

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

//创建guiconst 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)})

 

相关文章:

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

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

K8S集群常用命令

1,查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod,也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod,并且放出的信息更全(包含了pod的ip&#xff0…...

【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)

目录 1. 例题1:最大连续1的个数 1.1 解题思路 1.2代码实现 1.3 错误示范如下:我最开始写了一种,但是解答错误,请看,给大家做个参考 2. 将 x 减到 0 的最小操作数 2.1解题思路 2.2代码实现 1. 例题1&#xff…...

mayavi -> python 3D可视化工具Mayavi的安装

前言 Mayavi是一个基于VTK(Visualization Toolkit)的科学计算和可视化工具,主要用于数据可视化和科学计算领域。 它提供了一系列的高级可视化工具,包括2D和3D图形、表面和体积渲染、流场可视化等。Mayavi可以通过Python脚本进行调…...

【C++】B2112 石头剪子布

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述游戏规则:输入格式:输出格式:输入输出样例:解题分析与实现 💯我的做法实现逻辑优点与不足 &#x1f4af…...

【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度

使用 localStorage 存储每个视频的播放进度在组件加载时恢复上次的播放进度在视频播放过程中实时保存进度在组件卸载前保存最终进度使用 timeupdate 事件来监听视频播放进度的变化 在模板中为视频元素添加事件监听&#xff1a; <videoloopautoplaycontrols:id"video_…...

C# 25Dpoint

C# 25Dpoint &#xff0c;做一个备份 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace _25Dpoint {public partial cl…...

如何制作一个高质量的 Dockerfile 镜像:从入门到实践

Docker 是一种轻量级的容器化技术&#xff0c;能够将应用程序及其依赖打包到一个可移植的容器中。Dockerfile 是构建 Docker 镜像的核心文件&#xff0c;它定义了镜像的构建步骤和配置。通过编写 Dockerfile&#xff0c;我们可以自动化地构建镜像&#xff0c;确保应用程序在不同…...

Linux 机器学习

Linux 机器学习是指在 Linux 操作系统环境下进行机器学习相关的开发、训练和应用。 具体步骤 环境搭建&#xff1a; 选择合适的 Linux 发行版&#xff1a;如 Ubuntu、Fedora、Arch Linux 等。Ubuntu 因其易用性和丰富的软件包管理系统&#xff0c;适合初学者&#xff1b;Fed…...

青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据

青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据 一、UI数据二、Element Plus处理响应式数据三、Vuetify处理响应式数据 课题摘要:本文探讨了UI数据在用户界面中的重要性和处理方法。UI数据包括展示数据、用户输入、状态数据等&#xff0c;对用户体验和应用交互性有直…...

css实现响应式详解

一、媒体查询&#xff08;Media Queries&#xff09; 基本概念 媒体查询是 CSS3 中用于根据不同的设备特性&#xff08;如屏幕宽度、高度、设备类型等&#xff09;应用不同样式规则的技术。它允许你为特定的媒体类型&#xff08;如屏幕、打印、手持设备等&#xff09;和条件&a…...

python-应用自动化操作方法集合

python-PC应用自动化操作 pywinauto&#xff1a;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;通过遍历窗口&#xff08;对话框&#xff09;和窗口里的UI控件进行定位操作&#xff0c;也可以控制鼠标和键盘输入等 https://geekdaxue.co/read/pywinauto-doc-zh…...

mac地址是用来做什么的

MAC 地址&#xff08;Media Access Control Address&#xff09;是一个唯一的硬件地址&#xff0c;用于在网络中标识设备。每个网络接口卡&#xff08;NIC&#xff09;都有一个唯一的 MAC 地址。MAC 地址是数据链路层&#xff08;OSI模型的第二层&#xff09;使用的地址&#x…...

【Compose multiplatform教程】05 IOS环境编译

了解如何使现有的 Android 应用程序跨平台&#xff0c;以便它在 Android 和 iOS 上都能运行。您将能够在一个位置编写代码并针对 Android 和 iOS 进行测试一次。 本教程使用一个示例 Android 应用程序&#xff0c;其中包含用于输入用户名和密码的单个屏幕。凭证经过验证并保存…...

3D滤波器处理遥感tif图像

import cv2 import numpy as np from osgeo import gdal# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # …...

fisco bcosV3 Table智能合约开发

环境 &#xff1a; fisco bcos 3.11.0 webase-front : 3.1.1 console 3.8.0 table合约【3.2.0版本后的】 前言 最近在做毕设&#xff0c;数据的存储方式考虑使用fisco-bcos的table表存储&#xff0c;经过这几天的研究&#xff0c;发现对于fisco2和 fisco3版本的table表合约功能…...

leetcode刷题记录(四十八)——128. 最长连续序列

&#xff08;一&#xff09;问题描述 128. 最长连续序列 - 力扣&#xff08;LeetCode&#xff09;128. 最长连续序列 - 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。请你设计并实现时间复…...

HTML中如何保留字符串的空白符和换行符号的效果

有个字符串 储值门店{{thing3.DATA}}\n储值卡号{{character_string1.DATA}}\n储值金额{{amount4.DATA}}\n当前余额{{amount5.DATA}}\n储值时间{{time2.DATA}} &#xff0c; HTML中想要保留 \n的换行效果的有下面3种方法&#xff1a; 1、style 中 设置 white-space: pre-lin…...

Linux入门——环境基础开发(上)

Linux 软件包管理器 yum 什么是软件包 在Linux操作系统中&#xff0c;安装软件的方式通常较为复杂&#xff0c;其基本流程涉及下载程序源代码并通过编译得到可执行程序。然而&#xff0c;这种方法需要开发者具备一定的编程知识和环境配置能力&#xff0c;对于许多用户而言&am…...

c++类和对象---下

文章目录 一、类的静态成员 1.1.静态成员变量&#xff1a;所有对象共享的成员变量。 1.2.静态成员函数&#xff1a;可以访问静态成员变量&#xff0c;但不能访问非静态成员变量。 二、类的继承 2.1.继承&#xff1a;子类继承父类的成员变量和成员函数。 2.2.多态&#xff1a;基…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Linux入门课的思维导图

耗时两周&#xff0c;终于把慕课网上的Linux的基础入门课实操、总结完了&#xff01; 第一次以Blog的形式做学习记录&#xff0c;过程很有意思&#xff0c;但也很耗时。 课程时长5h&#xff0c;涉及到很多专有名词&#xff0c;要去逐个查找&#xff0c;以前接触过的概念因为时…...

C#中用于控制自定义特性(Attribute)

我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中&#xff0c;Attribute&#xff08;特性&#xff09;是一种用于向程序元素&#xff08;如类、方法、属性等&#xff09;添加元数据的机制。Attr…...