我想做一个用react-three-fiber放大的地球仪

Posted

技术标签:

【中文标题】我想做一个用react-three-fiber放大的地球仪【英文标题】:I want to make a earth globe which zooms in with react-three-fiber 【发布时间】:2021-08-27 13:37:28 【问题描述】:

我正在画布上制作一个地球仪。我想从很远的地方放大到地球。

例如:地球的位置在 [0,0,0] 并且相机在 [0,0,100] 现在我希望当页面加载时相机慢慢地向它缩放以创建漂亮的动画。

我写了这么多代码:

import './App.css';
import Canvas from '@react-three/fiber'
import OrbitControls from '@react-three/drei'
import Earth from './models/Earth'
import Suspense,useState from 'react'
function App() 
  
  return (
    <Canvas concurrent
    colorManagement style=backgroundColor:"black",height:"100vh",width:"100vw"
     orthographic camera= zoom: 1, position: [0, 0, 25] 
    >
    <ambientLight intensity=0.5 />
    <OrbitControls />
    <Suspense fallback=null ><Earth size=0.1 /></Suspense>
</Canvas>
  );


export default App;

主要问题是如何在页面加载时动态更改缩放?

【问题讨论】:

【参考方案1】:

这实际上是内置在 React 中的,悬念可以做到。 https://twitter.com/0xca0a/status/1402558012519337989

<Suspense fallback=null>
  <ComponentThatLoadsModel />
  <Zoom />
</Suspense>

function Zoom() 
  return useFrame(state => state.camera......

一旦悬念块中的所有内容都加载完毕,缩放组件就会挂载,这使得之后执行动作变得微不足道。您只需将缩放组件放入即可。

这是一个例子:https://codesandbox.io/s/cranky-newton-k7f9x?file=/src/App.tsx

【讨论】:

以上是关于我想做一个用react-three-fiber放大的地球仪的主要内容,如果未能解决你的问题,请参考以下文章

如何在threejs或react-three-fiber中加载相同的gltf模型

react-three-fiber如何提取和播放动画

如何在 react-three-fiber 中使用 GLTFExporter 导出多个不同的 3d 场景

突出显示或放大选定的单元格?

bufferGeometry setFromPoints 与 react-three-fiber

React-Three-Fiber (R3F):GLTF 加载程序加载问题。为啥我看不到我的模型?