three.js-结合dat.gui实现界面可视化修改及调试详解

目录
  • gitee 地址
    • 本篇目标
    • 下载 dat.gui
  • 引入及创建
    • 引入
    • 创建
  • 使用
    • 效果图
  • 完整代码

gitee 地址

gitee地址: gittee地址

本篇目标

  • 结合dat.gui实现界面可视化修改及调试

下载 dat.gui

pnpm i dat.gui

引入及创建

引入

import * as Dat from "dat.gui";

创建

/// 创建 dat
const dat = new Dat.GUI();

使用

这里我是装在一个函数里的,但不影响

/// 添加菜单
function addMenuItem () {
    // x 轴坐标
    dat
    .add(cube.position, 'x')
    .max(10)
    .min(0)
    .step(0.01)
    .name('移动x轴')
    .onChange(value => {
        console.log('我是当前正在移动的x轴', value);
    })
    .onFinishChange(value => {
        console.log('我是当前移动结束的x轴', value);
    })
}
// 添加菜单
addMenuItem ()

效果图

这样我们设置和退出画布全屏的这个功能就做好了。

完整代码

import * as THREE from "three"
// 目标:使用 dat.gui 进行 可视化调试
import * as Dat from "dat.gui";
/// 创建场景
const scene = new THREE.Scene()
/// 创建 dat
const dat = new Dat.GUI();
/// 创建相机
/*
    PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )
        fov — 摄像机视锥体垂直视野角度
        aspect — 摄像机视锥体长宽比
        near — 摄像机视锥体近端面
        far — 摄像机视锥体远端面
*/
/// 透视相机
const camera = new THREE.PerspectiveCamera(
    75, // 摄像机视锥体垂直视野角度,从视图的底部到顶部,以角度来表示。默认值是50。
    window.innerWidth / window.innerHeight, // 摄像机视锥体的长宽比,通常是使用画布的宽/画布的高。默认值是1(正方形画布)。
    0.1, // 摄像机的近端面,默认值是0.1。
    1000 // 摄像机的远端面,默认值 2000
)
/// 创建渲染器
const renderer = new THREE.WebGLRenderer();
/// 设置大小
renderer.setSize(
    1000, // 宽度
    500 // 高度
);
/// 挂载到页面
document.body.appendChild(renderer.domElement)
/// 添加物体
/*
    width:立方体x轴的长度,
    height:立方体y轴的长度,
    depth:立方体z轴的长度也是深度
*/
let geometry = new THREE.BoxGeometry(10, 10, 10);
/// 添加材质
// const material = new THREE.MeshBasicMaterial({ color: 0xffff0000 });
/// 添加材质
const materials = []
for(let i = 0; i < 6; i++){
    materials.push(new THREE.MeshBasicMaterial({ color: Math.random() * 0x00ff0000 }))
}
/// 添加网格
const cube = new THREE.Mesh( geometry, materials );
scene.add( cube );
// 设置相机位置
camera.position.z = 50;
// 修改场景背景颜色
scene.background = new THREE.Color(0xffffcc99)
/// 添加 三色坐标轴
const axesHelper = new THREE.AxesHelper(20)
scene.add( axesHelper )
/// 渲染
function animate() {
    // 使用 requestAnimationFrame 执行动画
    requestAnimationFrame(animate)
    // 修改其旋转的度数,让其每次渲染增加0.01的弧段进行渲染
    cube.rotation.x += 0.01;
	cube.rotation.y += 0.01;
    //scene:前面定义的场景,camera:前面定义的相机
    //renderTarget:渲染的目标默认是是渲染到前面定义的render变量中
    //forceClear:每次绘制之前都将画布的内容给清除,即使自动清除标志autoClear为false,也会清除
    renderer.render(scene, camera)
}
/// 添加菜单
function addMenuItem () {
    // x 轴坐标
    dat
    .add(cube.position, 'x')
    .max(10)
    .min(0)
    .step(0.01)
    .name('移动x轴')
    .onChange(value => {
        console.log('我是当前正在移动的x轴', value);
    })
    .onFinishChange(value => {
        console.log('我是当前移动结束的x轴', value);
    })
}
// 渲染
animate()
// 添加菜单
addMenuItem ()

以上就是three.js-结合dat.gui实现界面可视化修改及调试详解的详细内容,后续会讲解根据 BufferGeometry 设置的顶点创建几何矩形,更多关于three.js dat.gui界面可视化的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue+three.js实现炫酷的3D登陆页面示例详解

    目录 前言: Three.js的基础知识 关于场景 关于光源 关于相机(重要) 关于渲染器 完善效果 创建一个左上角的地球 使地球自转 创建星星 使星星运动 创建云以及运动轨迹 使云运动 完成three.js有关效果 结语 前言: 大家好,我是xx传媒严导(xx这两个字请自行脑补) . 该篇文章用到的主要技术:vue3.three.js 我们先看看成品效果: 高清大图预览(会有些慢): 座机小图预览: 废话不多说,直接进入正题 Three.js的基础知识 想象一下,在一个虚拟的3D世界中都需要什

  • Three.js利用dat.GUI如何简化试验流程详解

    简介 本文主要给大家介绍了关于Three.js利用dat.GUI如何简化试验流程的想内容,其实使用这个插件的最省事的地方在于,调试很方便的调节相关的值,从而影响最后绘制的结果.而dat.GUI实现的东西也很简单,理解起来也很好理解.下面话不多说了,来一起看看详细的介绍吧. 我们实例化dat.GUI对象后,会在右上角显示出一些可以调节的参数,比如: 这就是今天的案例制作出来的五个可以调节的属性.而且实现起来也很简单,而且大部分是需要我们做的,除了上面的这个控制台不是我们写出来的. 引入方式 首先,

  • Three.js引入Cannon.js及使用示例详解

    目录 引言 大体代码及效果 Cannon.js 打造当前 UI 引言 在开始之前,我们还是要解释下什么是 Cannon.js 以及它的作用. Cannon.js 是一个 3D 物理引擎,通过为物体赋予真实的物理属性的方式来计算运动.旋转和碰撞检测.Cannon.js 相较于其他常见的物理引擎来说,比较轻量级而且完全通过 JavaScript 来实现. Cannon.js 的官方文档地址为 schteppe.github.io/cannon.js/ ,从官方介绍中也可以看到很多有趣的例子,如下所示

  • Three.js Interpolant实现动画插值

    目录 Interpolant 通过离散的采样点定义曲线 插值的步骤 1. 寻找要插值的位置 2. 根据找到的左右两个点,进行插值 Interpolant源码 1. 构造器 2. copySampleValue_() 3. interpolate_( /* i1, t0, t, t1 */ ) 4. evaluate() 5. LinearInterpolant实现interpolate_( /* i1, t0, t, t1 */ )方法 总结 Interpolant 这个类主要是用来实现插值,常

  • three.js镜头追踪的移动效果实例

    目录 达到效果 实现思路 实现难点 1.折现变曲线 2.镜头朝向不受控 3.镜头位置绑定不受控 4.镜头抖动 最终实现方法 方法一:镜头沿线推进 方法二:使用tween动画 方法比较 其他方法 方法一:绘制一条折线+animate镜头推进 方法二:绘制多条线段+animate镜头推进 方法三:绘制多条线段+tween动画变化镜头 方法四:优化方法一,绘制一条折线+animate镜头推进 达到效果 指定一条折线路径,镜头沿着路径向前移动,类似第一视角走在当前路径上. 实现思路 很简单画一条折线路径

  • three.js创造时空裂缝特效实现示例

    目录 效果图 建模 多边形形状 随机多边形 漂浮动画 光照 后期处理 效果图 最近受到轮回系作品<寒蝉鸣泣之时>中时空裂缝场景的启发,我用three.js实现了一个实时渲染的时空裂缝场景.本文将简要地介绍下实现该效果的要点. 以下特效全屏观看效果最佳~ <div id="sketch"></div> <div> <div class="fixed z-5 top-0 left-0 loader-screen w-scree

  • three.js-结合dat.gui实现界面可视化修改及调试详解

    目录 gitee 地址 本篇目标 下载 dat.gui 引入及创建 引入 创建 使用 效果图 完整代码 gitee 地址 gitee地址: gittee地址 本篇目标 结合dat.gui实现界面可视化修改及调试 下载 dat.gui pnpm i dat.gui 引入及创建 引入 import * as Dat from "dat.gui"; 创建 /// 创建 dat const dat = new Dat.GUI(); 使用 这里我是装在一个函数里的,但不影响 /// 添加菜单 f

  • Vue.js 2.x之组件的定义和注册图文详解

    前言 什么是组件 组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可. 模块化和组件化的区别 模块化:是从代码逻辑的角度进行划分的:方便代码分层开发,保证每个功能模块的职能单一 组件化:是从UI界面的角度进行划分的:前端的组件化,方便UI组件的重用 全局组件的定义和注册 组件Component是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码. 全局组件的定义和注

  • 对python GUI实现完美进度条的示例详解

    在用python做一个GUI界面时,想搞一个进度条实时显示下载进度,但查阅很多博客,最后的显示效果都类似下面这种: 这种效果在CMD界面看着还可以,但放到图形界面时就有点丑了,所以我用Canvas重新做了一个进度条,完美满足了我的要求,看着也比较舒服. import time import threading from tkinter import * def update_progress_bar(): for percent in range(1, 101): hour = int(perc

  • 最强Python可视化绘图库Plotly详解用法

    今天给大家分享一篇可视化干货,介绍的是功能强大的开源 Python 绘图库 Plotly,教你如何用超简单的(甚至只要一行)代码,绘制出更棒的图表. 我之前一直使用 matplotlib ,由于它复杂的语法,我已经"沉没"在里面太多的时间成本.这也导致我花费了不知多少个深夜,在 StackOverflow 上搜索如何"格式化日期"或"增加第二个Y轴". 但我们现在有一个更好的选择了 ,比如易于使用.文档健全.功能强大的开源 Python 绘图库

  • Python制作可视化报表的示例详解

    大家好,我是小F- 在数据展示中使用图表来分享自己的见解,是个非常常见的方法. 这也是Tableau.Power BI这类商业智能仪表盘持续流行的原因之一,这些工具为数据提供了精美的图形解释. 当然了,这些工具也有着不少缺点,比如不够灵活,无法让你自己创建设计. 当你对图表展示要求定制化时,编程也许就比较适合你,比如Echarts.D3.js. 今天小F给大家介绍一个用Python制作可视化报表的案例,主要是使用到Dash+Tailwindcss. 可视化报表效果如下,水果销售情况一览~ Das

  • js基础之DOM中元素对象的属性方法详解

    在 HTML DOM (文档对象模型)中,每个部分都是节点. 节点是DOM结构中最基本的组成单元,每一个HTML标签都是DOM结构的节点. 文档是一个    文档节点 . 所有的HTML元素都是    元素节点 所有 HTML 属性都是    属性节点 文本插入到 HTML 元素是    文本节点 注释是    注释节点. 最基本的节点类型是Node类型,其他所有类型都继承自Node,DOM操作往往是js中开销最大的部分,因而NodeList导致的问题最多.要注意:NodeList是'动态的',

  • JS中call/apply、arguments、undefined/null方法详解

    a.call和apply方法详解 -------------------------------------------------------------------------------- call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指

  • JS中script标签defer和async属性的区别详解

    向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一种直接在script标签之间插入js代码,第二种即是通过src属性引入外部js文件.由于解释器在解析执行js代码期间会阻塞页面其余部分的渲染,对于存在大量js代码的页面来说会导致浏览器出现长时间的空白和延迟,为了避免这个问题,建议把全部的js引用放在</body>标签之前. script标签存在两个属性,defer和async,因此script标签的使用分为三种情况: 1.<script

  • JS生成某个范围的随机数【四种情况详解】

    前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random()  这个函数可以生成 [0,1) 的一个随机数. 利用它,我们就可以生成指定范围内的随机数. 而涉及范围的话,就有个边界值的问题.这样就包含四种情况: 1)min ≤ r ≤ max  (一般这种比较常见) 2)min ≤ r < max 3) min < r ≤ max 4)min < r < max 一.min ≤ r ≤ max function RandomNumBoth(

随机推荐