:)
简介
刷新其实可以和动画联系起来,改变场景中的物体(改变位置),刷新界面。最后就可以形成动画。一般1秒钟需要刷新60次
定时器实现动画
可以用js的定时器来做1秒60次的刷新
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(45,window.innerWidth / window.innerHeight,1,1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
var box = new THREE.Mesh(
new THREE.BoxGeometry(2,2,2),
new THREE.MeshBasicMaterial({
color: 0xffff00,wireframe:true
})
);
box.position.set(0,0,0); // 将立方体放到原点位置
scene.add(box);
camera.position.set(5,5,5);
camera.lookAt(box.position);
document.getElementById("content").appendChild(renderer.domElement);
function run() {
box.position.x += 0.005; //改变立方体的位置
renderer.render(scene,camera);
}
setInterval(run,1.0/60);
可以看到立方体沿着 x 轴移动。但是这个也有些问题,就是不太准确。html5有一个更好的办法来刷新requestAnimationFrame
requestAnimationFrame实现刷新
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(45,window.innerWidth / window.innerHeight,1,1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
var box = new THREE.Mesh(
new THREE.BoxGeometry(2,2,2),
new THREE.MeshBasicMaterial({
color: 0xffff00,wireframe:true
})
);
box.position.set(0,0,0); // 将立方体放到原点位置
scene.add(box);
camera.position.set(5,5,5);
camera.lookAt(box.position);
document.getElementById("content").appendChild(renderer.domElement);
function run() {
box.position.x += 0.005; //改变立方体的位置
renderer.render(scene,camera);
requestAnimationFrame(run);
}
// setInterval(run,1.0/60);
run();
场景中物体的其他属性
除了可以改变位置,还可以改变旋转角度,和缩放比例
- 位置是 position
- 旋转角度是 rotation
- 缩放是 scale
var step = 0.01;
function run() {
if(box.scale.x > 1.5){
box.scale.x -= step;
}else{
box.scale.x += step;
}
box.rotation.set(
box.rotation.x + step,
box.rotation.y + step,
box.rotation.z
);
box.rotation.z += step;
renderer.render(scene,camera);
requestAnimationFrame(run);
}
End
网友评论