Three.js——learn04

Three.js——learn04

通过dat.gui动态调整

通过使用dat.gui可以动态调整视图

安装

npm install dat.gui

导入

//导入dat.gui
import * as dat from 'dat.gui'

使用

修改基础属性

//创建GUI
const gui = new dat.GUI()
gui
  .add(cube.position, 'x')
  .min(0)
  .max(4)
  .step(0.05)
  .name('x轴坐标')
  .onChange(value => {
    console.log(value)
  })
  .onFinishChange(value => {
    console.log(value)
  })

在这里插入图片描述

修改颜色

const param = {
  color: '#ff00ff'
}
gui.addColor(param, 'color').onChange(value => {
  cube.material.color.set(value)
})

设置管理组

let group1 = gui.addFolder('组1')
group1.add(cube, 'visible').name('是否显示')

在这里插入图片描述

通过设置点来构建图形

我们使用到的是BufferGeometry对象构建几何体,然后设置点的位置,最后将几何体通过点绘制出来

import * as THREE from 'three'

const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
camera.position.set(0, 0, 5)
scene.add(camera)
const render = new THREE.WebGLRenderer()
render.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(render.domElement)
//构建几何体
const geometry = new THREE.BufferGeometry()
//设置点
const vertices = new Float32Array([-1, -1, 1, 1, -1, 1, 1, 1, 1])
//几何体通过点绘制
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))

const material = new THREE.MeshBasicMaterial({ color: '#ff00ff' })

const cube = new THREE.Mesh(geometry, material)

scene.add(cube)
render.render(scene, camera)

在这里插入图片描述

通过循环来构建“杂乱”的三角形集合

import * as THREE from 'three'
//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
camera.position.set(3, 3, 10)
scene.add(camera)
const render = new THREE.WebGLRenderer()
render.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(render.domElement)

for (let i = 0; i < 50; i++) {
  let geometry = new THREE.BufferGeometry()
  let vertices = new Float32Array(9)
  for (let j = 0; j < 9; j++) {
    vertices[j] = Math.random() * 5
  }
  geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))
  let color = new THREE.Color(Math.random(), Math.random(), Math.random())
  const material = new THREE.MeshBasicMaterial({ color: color })
  const cube = new THREE.Mesh(geometry, material)
  scene.add(cube)
}

const control = new OrbitControls(camera, render.domElement)
control.enableDamping = true
control.update()

const an = () => {
  control.update()
  render.render(scene, camera)
  requestAnimationFrame(an)
}
an()


在这里插入图片描述


版权声明:本文为qq_51553982原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。