首页 > 其他分享 >Three.js教程:gui.js库(可视化改变三维场景)

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

时间:2023-06-26 11:25:42浏览次数:49  
标签:obj gui Three js add 界面 属性

推荐:将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)

标签:obj,gui,Three,js,add,界面,属性
From: https://www.cnblogs.com/mvrlink/p/17505148.html

相关文章

  • Redfish是一种现代、开放且标准化的远程管理和监控接口,由DMTF(Distributed Management
    Redfish是一种现代、开放且标准化的远程管理和监控接口,由DMTF(DistributedManagementTaskForce)开发和维护。它基于RESTfulAPI设计,使用JSON或OData格式进行数据交换。Redfish旨在提供简化、灵活和可互操作的远程管理解决方案,取代或与传统的远程管理技术(如IPMI)配合使用。Redfish......
  • js三位分节法(数字大于1000时以,分割)
    1console.log(newIntl.NumberFormat().format(1000))//1,0002console.log(newIntl.NumberFormat('zh-CN').format(1000))//1,000中文3console.log(newIntl.NumberFormat('en-US').format(1000))//1,000英文4constformatter=ne......
  • fabricjs实现虚线流动动画效果
    要在Fabric.js中实现虚线流动的动画效果,你可以使用Fabric.js的动画功能来改变虚线的位置或属性。以下是一个示例代码,展示了如何在Fabric.js中实现虚线流动的动画效果://创建画布varcanvas=newfabric.Canvas('canvas');//创建虚线对象vardashedLine=newfabri......
  • 【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(二)
    在上文中,我们为大家介绍了HTML/JSP编辑器、智能代码完成和内容辅助等功能,本文将继续介绍Emmet支持、Outline视图功能等。MyEclipsev2023.1正式版下载MyEclipse技术交流群:742336981欢迎一起进群讨论如果您有HTML或JSP文件要编辑,这里将介绍如何编辑。查找以下信息:编辑源代......
  • 【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(二)
    在上文中(点击这里回顾>>),我们为大家介绍了HTML/JSP编辑器、智能代码完成和内容辅助等功能,本文将继续介绍Emmet支持、Outline视图功能等。MyEclipsev2023.1正式版下载如果您有HTML或JSP文件要编辑,这里将介绍如何编辑。查找以下信息:编辑源代码大纲和属性视图参数页面该功能在MyEcl......
  • js节流函数与防抖函数
    防抖函数和节流函数都是为了解决JavaScript中频繁触发事件而导致的性能问题,但它们的实现方式和使用场景有所不同。一、防抖函数防抖函数的作用是在事件触发后一定时间内没有再次触发该事件时,才执行处理方法。简单来说,就是在最后一个事件被触发后,还要等待一段时间,如果这段时间内......
  • 前端 js 获取 baseurl
    如果部署一个网站到网络需要知道对应的ip,这个时候前端的baseurl需要动态调整,一般是在public里面写个config.js,部署的时候改这个config.js里面的内容有一种偷懒的方式就是用户是知道你的ip的,这个时候可以用window.location.host获取当前浏览器的host网址拿这个当bas......
  • flv.js视频流出错,断流处理
    flv.js视频流出错,断流处理可乐加冰5152023年02月20日17:45 ·  阅读274场景:前端使用flv.js播放视频流Bug表现:视频流播放两分钟左右video标签出现暂停按钮,控制台flv.js报错:Failedtoexecute'appendBuffer'on'SourceBuffer':TheHTMLMediaElement.erroratt......
  • JS(数组)
    一数组的概念问:之前学习的数据类型,只能存储一个值。如果我们想存储班级中所有学生的姓名,那么该如何存储呢?答:可以使用数组(Array)。数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。问:什么是数组呢?答:数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存......
  • springboot中自定义JavaBean返回的json对象属性名称大写变小写问题
    目录一、继承类二、手动添加Get方法三、@JsonProperty四、spring-bootjson(jackson)属性命名策略开发过程中发现查询返回的数据出现自定义的JavaBean的属性值大小写格式出现问题,导致前端无法接受到数据,目前有四种解决方法,根据大佬的经验之谈,前两种是最简单便捷的,后两种是比较通......