1

我在反应三纤维中不知所措。我想为相机创建一个装备(这在 three.js 中很简单)。我把相机放在一组里面。如果我想绕 Y 轴旋转相机,我改变父组的旋转。如果我想绕 X 轴旋转它,我会旋转相机本身。这样,我不处理万向节问题(例如,如果 y 旋转为 180 度,则 x 旋转反转)。

在three.js中我会做:

const cameraRig = new THREE.Group();
cameraRig.add(camera);
scene.add(cameraRig);

cameraRig.rotation.y = Math.PI;
camera.rotation.x = Math.PI/8;

但在 react-three-fiber 我不知道。

我有一台我正在使用的相机,来自 useThree

const {camera} = useThree();

ReactDOM.render(
  <Canvas>
    <ambientLight />
    <group rotation={[0,Math.PI,0]}>
      <camera rotation={[Math.PI/8,0,0]}/>
    </group>
  </Canvas>,
  document.getElementById('root')
);
4

2 回答 2

1

react-three-fiber 自带摄像头,这个是默认的,你不能在里面嵌套孩子。您当然可以使用自己的相机,状态模型为此提供了“setDefaultCamera”功能,以便指针事件和其他一切都可以使用您的新相机。不幸的是,相机在三个中都不是直截了当的,所以仍然涉及一些流失,因为您需要在调整大小时对其进行更新,您需要计算纵横比等。所有这些都已在此处抽象:https ://github.com/pmndrs/drei#perspectivecamera -

<PerspectiveCamera makeDefault>
  <mesh />
</PerspectiveCamera>

照顾一切。现在相机是系统默认设置,它需要孩子。

于 2020-09-25T07:31:40.143 回答
0

经典游戏中,为了让相机像 FPS 相机一样移动并且不会失去“向上”的状态,您可以将相机放在另一个 3D 对象内,并围绕外部对象中的 Y 轴和相机对象的 X 轴旋转,以防止万向节异常。在反应三纤维中这样做会导致一个奇怪的错误,使相机冻结。为了解决这个问题,您可以更改表示相机旋转的 Euler 的旋转 ORDER,而不是构建绑定。为此,只需执行以下操作:

const { scene, gl, size, camera } = useThree();
camera.rotation.order = "YXZ";
于 2020-12-17T17:53:49.520 回答