1、安装
npm install dat.gui gsap
说明 gsap 是动画库
2、使用
import * as THREE from 'three'
//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// console.log(THREE, 'three')
// 导入动画库
import gsap from 'gsap'
// 导入 dat.gui
import * as dat from 'dat.gui'
// 目标:js控制画面全屏
//1.创建场景
const scene = new THREE.Scene()
//2.创建相机 角度 宽高比 近端 远端
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
// 设置相机位置 x y z
camera.position.set(0, 0, 10)
// 把相机添加到场景中
scene.add(camera)
// 添加物体
// 创建几何体
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1)
// 材质
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 })
// 根据几何体和材质创建物体
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)
const gui = new dat.GUI();
gui
.add(cube.position, "x")
.min(0)
.max(5)
.step(0.01)
.name("移动x轴")
.onChange((value) => { console.log(value, '修改的值') })
.onFinishChange((value) => { console.log(value, '停下来修改的值') })
// 修改物体的颜色
const params = {
color: "#ffff00",
fn: () => {
//让立方体动起来
gsap.to(cube.position, { x: 5, duration: 2, yoyo: true, repeat: -1 })
}
}
gui.addColor(params, "color").onChange((value) => {
console.log("值被修改:", value)
cube.material.color.set(value)
})
// 设置选项框
gui.add(cube, "visible").name("是否显示")
//设置按钮点击触发某个事件
//gui.add(params, "fn").name("立方体运动")
// 放到文件夹下 可收起
let folder=gui.addFolder("设置立方体")
folder.add(cube.material,"wireframe")
folder.add(params, "fn").name("立方体运动")
// 修改物体的位置
// cube.position.set(5,0,0)
// cube.position.x = 5
// 缩放
// cube.scale.set(5,5,5)
// cube.scale.x=5
// 旋转
// cube.rotation.set(Math.PI/4,0,0,"XYZ")
// cube.rotation.x=6
// 将几何体添加到场景当中
scene.add(cube);
// 初始化渲染器
const renderer = new THREE.WebGLRenderer()
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)
// console.log(renderer,'renderer')
// 将webgel渲染的canvas内容添加到body
document.body.appendChild(renderer.domElement)
// 使用渲染器,通过相机将场景渲染进来
// renderer.render(scene, camera)
// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement)
// 设置控制器的阻尼 更真实 惯性
controls.enableDamping = true
// 添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper(5)
scene.add(axesHelper)
// 设置时钟
const clock = new THREE.Clock()
window.addEventListener("dblclick", () => {
// 双击控制屏幕进入全屏,退出全屏
const fullScreenElement = document.fullscreenElement
if (!fullScreenElement) {
// 让画布对象全屏
renderer.domElement.requestFullscreen()
} else {
// 退出全屏
document.exitFullscreen()
}
})
function render () {
controls.update()
renderer.render(scene, camera);
// 渲染下一帧的时候 调用 render函数
requestAnimationFrame(render)
}
render()
// 监听画面变化,更新渲染画面
window.addEventListener("resize", () => {
// 更新摄像头
camera.aspect = window.innerWidth / window.innerHeight
// 更新摄像机的投影矩阵
camera.updateProjectionMatrix()
// 更新渲染器
renderer.setSize(window.innerWidth, window.innerHeight)
// 设置渲染器的像素比
renderer.setPixelRatio(window.devicePixelRatio)
})