通过相机动画案例了解threejs 相机Camera.lookAt()方法

参考资料:threejs中文网

threejs qq交流群:814702116

下面给大家讲解,通过相机对象Camera.position属性和.lookAt()方法,实现一段相机动画。

相机运动动画

改变相机的位置.position,三维场景在canvas画布上呈现不同的效果,如果连续改变相机的位置.position,就可以获得一个动画效果。

课件案例源码是一个工厂模型,相机在空中俯视工厂,如果在渲染循环中不停地改变相机位置,这时候产生的视觉效果,就好比你在天上运动,看地面的效果。

// 渲染循环
function render() {
    camera.position.z -= 0.3;//相机直线运动动画
    renderer.render(scene, camera);
    requestAnimationFrame(render);
}
render();

相机圆周运动

在渲染循环中,改变相机位置,在XOZ平面上绕着y轴圆周运动。

// 渲染循环
let angle = 0; //用于圆周运动计算的角度值
const R = 100; //相机圆周运动的半径
function render() {
    angle += 0.01;
    // 相机y坐标不变,在XOZ平面上做圆周运动
    camera.position.x = R * Math.cos(angle);
    camera.position.z = R * Math.sin(angle);
    renderer.render(scene, camera);
    requestAnimationFrame(render);
}
render();

执行lookAt()计算相机视线方向

改变.position属性后,如果不执行.lookAt()方法,相机的观察方向默认不变。

如果你希望相机圆周运动的同时,改变相机视线方向,保持相机镜头始终指向坐标原点或其它位置,需要每次改变.position属性后,重新执行一遍.lookAt()方法

function render() {
    angle += 0.01;
    camera.position.x = R * Math.cos(angle);
    camera.position.z = R * Math.sin(angle);
    // .position改变,重新执行lookAt(0,0,0)计算相机视线方向
    camera.lookAt(0,0,0);
    requestAnimationFrame(render);
}
render();
Three.js 中,`camera.lookAt()` 函数用于设置相机的朝向,使其看起来指向特定的位置。当你在初始化场景时,如果直接设置 `camera.lookAt()` 的初始值无效,可能是以下几个原因: 1. **未设置目标位置**:确保你在调用 `lookAt()` 之前已经设置了相机想要对准的对象的位置。例如,如果你有一个物体,应该先创建一个 `THREE.Vector3` 对象表示该物体的位置,然后传给 `lookAt()`。 ```javascript let target = new THREE.Vector3(x, y, z); // x, y, z是你希望相机看向的位置坐标 camera.lookAt(target); ``` 2. **相机位置错误**:确认相机的当前位置是否正确,它需要有自己的位置(`position`)属性,否则默认是 `(0, 0, 0)`,此时看向前方可能就看不到任何东西。 3. **相机方向问题**:有时由于相机的旋转或其他设置导致 `lookAt()` 无法正常工作。检查相机的 `up` 或 `target` 属性是否有误。 4. **动画或变化延迟**:在某些情况下,如在动画循环中,`lookAt()` 可能不会立即生效,直到下一次渲染周期。 如果你确定以上都无误,但问题依然存在,可以尝试在渲染前设置好相机的视角,或者在渲染回调中手动更新: ```javascript function init() { // 初始化相机... camera.position.set(0, 0, 5); // 设置一个初始位置 let target = new THREE.Vector3(0, 0, 0); // 目标位置 camera.lookAt(target); // 渲染函数 function render() { requestAnimationFrame(render); scene.render(camera); } render(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Threejs可视化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值