1.搭建threejs网站,和开发环境的搭建
- 克隆代码github.com/mrdoob/thre… 到本地,进行运行
- 首先git init 初始化项目,
- 安装parcel 打包工具,parcel是一个极速零配置的打包工具,可以以任意文件为入口文件
- 安装three依赖 npm install three --save
2.入门与调试
- 创建一个场景
import * as THREE from 'three';
const scene = new THREE.Scene();
scene.background = new THREE.Color(0xff4400)
- 创建一个相机对象,
PerspectiveCamera中参数介绍PerspectiveCamera(fov,aspect,near,far),
fov:视野角度,
aspect:当前画布的宽高比,
near:近截面,
far:远截面

const camera= new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
0.1,
1000
);
camera.position.set(0,0,5);
camera.lookAt(0,0,0)
- 渲染器
通过一个 WebGLRenderer构造器,实例化一个渲染器对象
const renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0x00ff00);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth,window.innerHeight);
document.documentElement.appendChild(renderer.domElement);
renderer.render(scene,camera)
- 辅助坐标系
const helper = new THREE.AxesHelper(5);
scene.add(helper)
- 轨道控制器,可以让相机围绕着物体进行转动
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
const orbit = new OrbitControls(camera,renderer.domElement);
render()
function render(){
renderer.render(scene,camera);
}
- 物体的移动、缩放和旋转
移动:cube.position.x = 2 或者cube.position.set(x,y,z)
缩放:cube.scale.x = Math.PI / 4 或者cube.scale.set(x,y,z)
旋转: cube.rotation.x = Math.PI / 4 或者cube.rotation.set(x,y,z)
cube.position.x += 0.01;
if(cube.position.x > 5){
cube.position.x = 0
}
cube.scale.x += 0.01;
if(cube.scale.x > 1.5){
cube.scale.x =1
}
cube.rotation.set(Math.PI /4,Math.PI /6,0,"XYZ")
- clock跟踪处理时间主要是2个方法
getElapsedTime():获得时钟运行的总时长
getDelta():获取自oldTime设置后到当前的秒数,oldTime是存储最后一次调用start,getElapsedTime(),或者getDelta()方法
- gsap动画库
gsap.to(参数1,参数2),中有2个参数,第一个参数是css选择器或者obj对象,第二个参数是状态对象,状态对象中设置属性有:
x: x轴移动的距离 x:100就相当于transltateX(100px),
y: y轴移动的距离 y:100就相当于transltateY(100px),
duration: 动画持续的时间,单位是s,
delay:动画延时的时间,
repeat:动画重复的次数,-1就是一直重复
repeatDelay:重复播放间隔的时间,单位是s
yoyo:为true,开启往返运动,
onComplete:动画完成时调用函数,
onUpdate:动画持续运动中调用该函数
gsap.to(cube.rotation, {
x: 10,
duration: 5,
repeat: -1,
yoyo: true,
repeatDelay: 1,
onComplete: function () {
console.log("动画完成了");
},
onUpdate:function(){
console.log('动画在持续运动中')
}
});
- 自适应屏幕大小以及全屏的切换
window.addEventListener('resize',()=>{
console.log(0000)
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth,window.innerHeight);
renderer.setPixelRatio(window.devicePixelRatio);
})
window.addEventListener('dblclick',function(){
if(document.fullscreenElement){
document.exitFullscreen()
}else{
renderer.domElement.requestFullscreen();
}
})