【Three.js基础学习】5.Debug-ui

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

    课程要点:

    调试用户界面

    我们可以在界面中 通过面板去控制,不需要通过代码一点点修改,只需要在面板中

    事先添加所需要的控制

    1. lil-gui   其中dat-gui很长时间不维护,有bug

    npm i --save lil-gui

一、代码

import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import gsap from 'gsap' // npm
import * as lil from 'lil-gui'


/**
  *  Debug
  */
const gui = new lil.GUI()

function spin(){

}

const colorFormats = {
	string: '#ff0000',
	int: 0xff0000,
	object: { r: 1, g: 1, b: 1 },
	array: [ 1, 1, 1 ],
    spin:()=>{
        console.log('spin look')

        gsap.to(mesh.rotation,{duration:1,y:mesh.rotation.y + 10})
    }
};


/**
 * Base
 */
// Canvas
const canvas = document.querySelector('canvas.webgl')

// Scene
const scene = new THREE.Scene()

/**
 * Object
 */
const geometry = new THREE.BoxGeometry(1, 1, 1)
const material = new THREE.MeshBasicMaterial({ color: colorFormats.string })
const mesh = new THREE.Mesh(geometry, material)
scene.add(mesh)


// Debug 
//  参数1:对象,对象属性 , 参数2: 控制的属性名

gui
    .add(mesh.position,'y')
    .min(-3)
    .max(3)
    .step(0.01)
    .name('可以更改姓名!')

gui
    .add(mesh,'visible')

gui
    .add(material,'wireframe')

gui
    .addColor(colorFormats,'string')
    .onChange(()=>{
        material.color.set(colorFormats.string)
    })
 
gui
    .add(colorFormats,'spin') // 这里将对象中colorFormats,的spin函数添加到调试框中

/**
 * Sizes
 */
const sizes = {
    width: window.innerWidth,
    height: window.innerHeight
}

window.addEventListener('resize', () =>
{
    // Update sizes
    sizes.width = window.innerWidth
    sizes.height = window.innerHeight

    // Update camera
    camera.aspect = sizes.width / sizes.height
    camera.updateProjectionMatrix()

    // Update renderer
    renderer.setSize(sizes.width, sizes.height)
    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))
})

/**
 * Camera
 */
// Base camera
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 0.1, 100)
camera.position.z = 3
scene.add(camera)

// Controls
const controls = new OrbitControls(camera, canvas)
controls.enableDamping = true

/**
 * Renderer
 */
const renderer = new THREE.WebGLRenderer({
    canvas: canvas
})
renderer.setSize(sizes.width, sizes.height)
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))

/**
 * Animate
 */
const clock = new THREE.Clock()

const tick = () =>
{
    const elapsedTime = clock.getElapsedTime()

    // Update controls
    controls.update()

    // Render
    renderer.render(scene, camera)

    // Call tick again on the next frame
    window.requestAnimationFrame(tick)
}

tick()

二、知识点

1.gui

 可以在npm官网中找到lil-gui

方法

add()  // 参数1 : 放对象,或对象属性 ; 参数2 :定义调试面板的属性名

min() // 

max() // 

step() // 步长

name() //  可以通过这个方法去自定义面板中的名字

addColor() // 定义颜色  参数1:对象 参数2:属性

onChange() // 面板中修改颜色,更新到立方体上面

其中

const colorFormats = {
	string: '#ff0000',
	int: 0xff0000,
	object: { r: 1, g: 1, b: 1 },
	array: [ 1, 1, 1 ],
    spin:()=>{
        console.log('spin look')

        gsap.to(mesh.rotation,{duration:1,y:mesh.rotation.y + 10})
    }
};


gui
    .add(colorFormats,'spin') // 这里将对象中colorFormats,的spin函数添加到调试框中

在colorFormats中定义了一个函数,添加到用户调试界面中,那么就会形成一个按钮,在点击时候会调用函数中的内容 ,上面效果是一个旋转


总结

回顾以下之前知识点

window.devicePixelRatio // 获取当前设备的像素比

updateProjectionMatrix() // 更新相机

setPixelRatio //  设置当前设备像素比,能获得更好的画质,但是会有性能问题

双击全屏 和 取消全屏

requestFullscreen , exitFullscreen

面板能帮助我们更快的调试内容,更好的开发!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值