Three.js教程:gui.js库(可视化改变三维场景)

news/2024/7/7 19:43:18
推荐:将 NSDT场景编辑器 加入你的3D工具链
其他系列工具: NSDT简石数字孪生

gui.js库(可视化改变三维场景)

gui.js库(可视化改变三维场景)

dat.gui.js说白了就是一个前端js库,对HTML、CSS和JavaScript进行了封装,学习开发的时候,借助dat.gui.js可以快速创建控制三维场景的UI交互界面,你打开课件中案例源码体验一下就能感受到。

课程学习dat.gui.js也不仅仅是为了学习dat.gui.js,也是建立一种思想,就是threejs三维空间的很多参数,不是心算出来的,往往需要可视化的方式调试出来。

引入dat.gui.js

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

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

你可以通过npm或github方式获得dat.gui.js库,当然为了学习方便,threejs官方案例扩展库中也提供了gui.js,你可以直接使用。

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

创建一个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 = '300px';

.add()方法

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

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

其他参数,可以一个或多个,数据类型也可以不同,gui会自动根据参数形式,自动生成对应的交互界面。

参数3和参数4,分别是一个数字,交互界面是一个鼠标可以拖动的拖动条,可以在一个区间改变属性的值

执行gui.add(obj, 'x', 0, 100);你可以发现右上角gui界面增加了新的内容,可以控制obj对象x属性的新交互界面。

//创建一个对象,对象属性的值可以被GUI库创建的交互界面改变
const obj = {
    x: 30,
};
// gui增加交互界面,用来改变obj对应属性
gui.add(obj, 'x', 0, 100);

体验.add()功能——改变对象属性值

为了方便观察.add()是如何改变JavaScript对象属性的,可以浏览器控制台不停地打印obj的值,这样通过gui界面拖动改变obj对象属性的的时候,便于观察obj的变化。

const obj = {x: 30};
setInterval(function () {
    console.log('x', obj.x);
}, 10)

gui改变js对象多个属性

const obj = {
    x: 30,
    y: 60,
    z: 300,
};
// gui界面上增加交互界面,改变obj对应属性
gui.add(obj, 'x', 0, 100);
gui.add(obj, 'y', 0, 50);
gui.add(obj, 'z', 0, 60);

gui改变threejs光照强度测试

three.js在调试场景渲染效果的时候,比如光照的强度,人大脑的CPU是没有能力通过光照参数算出来模型渲染效果的,一般来说你先大概给一个经验值,然后通过gui在这个大概值的基础上下浮动可视化调试。

光源对象具有一个光照强度属性.intensity,可以通过gui拖动条改变该属性。

// 光照强度属性.intensity
console.log('ambient.intensity',ambient.intensity);
// 通过GUI改变mesh.position对象的xyz属性
gui.add(ambient, 'intensity', 0, 2.0);

gui改变threejs模型位置测试

mesh.position是JavaScript对象,具有xyz属性,这三个属性分别表示模型的xyz坐标,这就是说,gui改变mesh.positionxyz属性,就可以可视化改变mesh的位置。

gui.add(mesh.position, 'x', 0, 180);
gui.add(mesh.position, 'y', 0, 180);
gui.add(mesh.position, 'z', 0, 180);

3D建模学习工作室

上一篇:Three.js教程:WebGL渲染器设置(锯齿模糊) (mvrlink.com)

下一篇:Three.js教程:gui调试界面2-颜色命名等 (mvrlink.com)


http://lihuaxi.xjx100.cn/news/1280192.html

相关文章

【vue2】封装文字过长自动省略部分并且鼠标悬浮显示全部

技术:Ant design vue1.7.8 UI框架、vue2.X 需求:实现文字过长自动省略部分,鼠标悬浮显示全部 效果图: 图一: 图二: 1.封装组件代码: src/components/Ellipsis/index.js 文件下代码 import Ellipsis f…

dsl语句查询elasticsearch集群节点分布和资源使用情况

查询语句如下(本文是直接在kibana里面执行的哦) GET _cat/nodes?v执行结果 这样就可以很直观的看到,es部署在了哪些节点上,以及各节点资源分布使用

【PostgreSQL-16新特性之普通用户的保留连接个数(reserved_connections)】

PostgreSQL数据库为了保证在高并发,高连接数情况下某些用户能够正常连接到数据库里,设立了几个用户连接的保留个数。 本文介绍了PostgreSQL16版本前为超级用户保留的连接数(superuser_reserved_connections)以及PostgreSQL16版本…

python3.10-一些有意思的语法

python3.10发行已经有一段时间了,但是时至今日才开始用上python3.10版本,说实话有点惭愧。下面来记录一下,在Python3.10版本中几个亮眼的语法变更: 带括号的上下文管理器 在以前,我们如果需要打开多个文件&#xff0…

DALL-E2原理解读——大模型论文阅读笔记五

论文:https://cdn.openai.com/papers/dall-e-2.pdf 项目:https://openai.com/dall-e-2 一. 主要思想 利用CLIP提取的文本特征,级联式的生成图片。第一阶段通过prior将文本特征与图像特征进行对齐,第二阶段用扩散模型将视觉特征转…

基于matlab多运动目标跟踪监测算法实现(附源码)

一、前言 此示例演示如何对来自固定摄像机的视频中的移动对象执行自动检测和基于运动的跟踪。 二、介绍 移动物体检测和基于运动的跟踪是许多计算机视觉应用的重要组成部分,包括活动识别、交通监控和汽车安全。基于运动的对象跟踪问题可以分为两部分: 检…

Jupyter notebook运行环境创建

进入到jupyter notebook,没找到自己之前创建的环境xzc_pytorch 进入到Anaconda prompt,输入如下命令 (xzc_pytorch) C:\Users\xzc> conda install ipykernel安装完后,重启jupyter notebook发现还是没有 ,此时选择手动创建,在base环境下执…

Segment Anything Model Geospatial (SAM-Geo) 创建交互式地图

SAM-Geo是一个用于地理空间数据的Python 包,可在 PyPI 和 conda-forge 上使用。本节教程是SAM-Geo官网的一个教程,根据输入提示范围创建mask遮罩。后面还有一种基于提示词创建的方式,如只输出房屋、道路、树木等,下一期我们专门写…