threejs 基础02

40 阅读2分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情

three.js基础01

接上上次写的我们需要让视角随着鼠标转动而转动,我们需要在给物体在加上轨道,也就是这个OrbitControls大家可以看官网截图

three13.png 如果大家想看更加详细了解,可以看官网,这里也只是使用,复杂使用后面会使用

// 添加轨道 大家可以想象一下,轨道其实就是相当于把相机放在了一个滑轨上,可以360度的去观看
let orbitControls = new OrbitControls(camera,renderer.domElement)
// 1.  相机,让哪一个相机围绕目标运动。默认目标是原点。立方体在原点处。
// 2.  渲染的画布dom对象,用于监听鼠标事件控制相机的围绕运动

后面添加了坐标系,方面我们调试动画或者位置,大家可以看一下官网截图

three14.png 添加坐标系js

// 添加坐标 AxesHelper
const axesHelper = new THREE.AxesHelper( 5 );
// 场景添加坐标系
scene.add(axesHelper)

添加之后的状态

three15.png 添加完成坐标轴的状态 我们想让其移动我们可以使用创建物体方法里position设置 有两种设置方式

// 根据几何体和材质创建物体
const cube = new THREE.Mesh(geometry,cun)
// 3d物体移动
// cube.position.set(-2,0,0) x y z 三个参数分别是x轴 y轴 z轴 这是一种方式
 cube.position.x = 0 // 直接设置相对应的 x y z属性是第二种方式(这种方式用的比较多)

这里也用到了 equestAnimationFrame

equestAnimationFrame 是HTML5的新特性,和setTimeout,setInterval不一样 requestAnimationFrame比后两者精确,采用系统时间间隔,保持最佳绘制效率,不会因为间隔时间过短,造成过度绘制,增加开销;也不会因为间隔时间太长,使动画卡顿不流畅,让各种网页动画效果能够有一个统一的刷新机制,从而节省系统资源,提高系统性能,改善视觉效果。

requestAnimationFrame是由浏览器专门为动画提供的API,

这是有requestAnimationFrame的方法,需要每个系统时间间隔都需要刷新一次

function render() {
    // 物体移动
    cube.position.x +=0.01
    if (cube.position.x>=5) {
        cube.position.x = 0
    }
    renderer.render(scene,camera)
    // 渲染下一桢
    requestAnimationFrame(render)
}
render()

这是代码块