【问题标题】:THREE.js rotating camera around an object using orbit pathTHREE.js 使用轨道路径围绕物体旋转相机
【发布时间】:2013-03-16 13:40:19
【问题描述】:

我正在努力解决这个问题。

在我的场景中,我有一个相机,它可以观察物体的质心。我有一些按钮可以沿着物体周围的不可见球体(恒定半径)在特定视图(前视图、后视图……)上设置相机位置。

当我单击按钮时,我希望相机沿球体表面从其起始位置移动到结束位置。当相机移动时,我希望它保持固定物体的质心。

有没有人知道如何做到这一点?

感谢您的帮助!

【问题讨论】:

    标签: camera rotation three.js geometry


    【解决方案1】:

    如果你喜欢/喜欢使用基本三角函数,那么在你的初始化部分你可以这样做:

    var cameraAngle = 0;
    var orbitRange = 100;
    var orbitSpeed = 2 * Math.PI/180;
    var desiredAngle = 90 * Math.PI/180;
    ...
    camera.position.set(orbitRange,0,0);
    camera.lookAt(myObject.position);
    

    然后在你的渲染/动画部分你可以这样做:

    if (cameraAngle == desiredAngle) { orbitSpeed = 0; }
    else {
      cameraAngle += orbitSpeed;
      camera.position.x = Math.cos(cameraAngle) * orbitRange;
      camera.position.y = Math.sin(cameraAngle) * orbitRange;
    }
    

    当然,您的按钮会修改 desiredAngle 的值(大概是 0°、90°、180° 或 270°),您需要围绕正确的平面旋转(我正在围绕上方的 XY 平面旋转),你可以玩orbitRangeorbitSpeed直到你开心为止。

    您还可以修改orbitSpeed,因为它沿着轨道路径移动,以各种cameraAngles 加速和减速,以获得更平稳的行驶。此过程称为“补间”,如果您想了解更多信息,可以搜索“补间”或“补间”。我认为 Three.js 有补间支持,但从未研究过。

    哦,还记得将相机的far 属性设置为大于orbitRadius,否则您将只能看到对象的前半部分,并且根据具体情况,这可能看起来很奇怪。

    【讨论】:

    • 你如何设置 .position.z 一路走来??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多