【问题标题】:How do I dolly or zoom using React three fiber or threejs?我如何使用 React 三纤或threejs 推拉或缩放?
【发布时间】:2022-06-11 11:39:26
【问题描述】:

我有一个react-three-fiber 应用程序,我使用OrbitControls 作为我的相机控件。

我想使用屏幕上的按钮手动放大/缩小,但我的代码无法正常工作。

我希望这些按钮的工作方式与鼠标中键与OrbitControls 的工作方式相同。 有人如何使用React 来完成这项工作吗?

我尝试使用 useThree() 挂钩更改相机位置,但它没有按我的意愿工作。

谢谢。

【问题讨论】:

  • 看看我的回答

标签: three.js orbitcontrols


【解决方案1】:

当您使用带有OrbitControls 的中间滚轮时,它所做的只是将相机位置乘以某个值。因此,如果您想手动执行此操作,则可以使用以下函数:

function zoom(constant){
    camera.position.x = camera.position.x * constant;
    camera.position.y = camera.position.y * constant;
    camera.position.z = camera.position.z * constant;
}

如果你想放大,更近,那么你传递一个小于一个的值。如果你想缩小,进一步,你传递一个大于一个的值。

【讨论】:

  • 谢谢!我尝试了您的解决方案,缩放就像 OrbitControls 一样工作。但我意识到 OrbitControls 不允许你无限放大。有什么办法可以做到这一点。作为参考,您可以查看 FirstPersonControls。您可以使用此控件无限缩放。
  • OrbitControls 可以让你无限放大。但是,如果您离目标太近(默认为 0, 0, 0),那么它就会开始变慢,因为您无法放大到比中心更远的地方。这没有任何意义。您可以无限放大out,因为那里没有什么可以阻止您(没有原点)。我希望这是有道理的
  • 另外,如果你能投票就太好了,它有很大帮助:)
  • 抱歉,我的问题不清楚。我的意思是,即使我到达中心,我是否也能继续前进。如果你看一下这个例子 threejs.org/examples/#webgl_geometry_terrain 。即使您到达目标,相机仍然能够向前移动。有没有办法用 OrbitControls 做到这一点
  • 啊,我明白了。您可以不断更改 OrbitControls 的目标。你可以使用controls.target = new THREE.Vector3(0, 10, 0);,然后使用controls.update()
猜你喜欢
  • 1970-01-01
  • 2021-06-28
  • 2022-01-08
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
相关资源
最近更新 更多