如何正确使用 drei useGLTF
How do I properly use drei useGLTF
我想我正在关注 react-three 文档和许多其他示例,但无法让 drei useGLTF 像其他人那样工作。
我有一个简单的、从零开始的 Next|React|react-three/fiber 项目。我只是想加载示例宇航员并显示它。
我相信以下代码在一段时间内确实运行良好。经过一些小的更改和撤消后,我想我回到了相同的代码,但现在不起作用。 (我试过使用和不使用 Suspense。)
import { Canvas, Suspense } from '@react-three/fiber'
import { useGLTF } from '@react-three/drei'
function Model() {
const gltf = useGLTF('https://thinkuldeep.com/modelviewer/Astronaut.glb')
return (<primitive object={gltf.scene} />)
}
export default function Home() {
return (
<div>
{/* <Suspense> */}
<Canvas>
<ambientLight />
<Model />
</Canvas>
{/* </Suspense> */}
</div>
)
}
控制台消息如下:
这是我的 package.json:
{
"name": "cfgnext",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@react-three/drei": "^8.18.10",
"@react-three/fiber": "^7.0.26",
"next": "12.1.0",
"react": "17.0.2",
"react-dom": "^17.0.2",
"styled-components": "^5.3.3"
},
"devDependencies": {
"eslint": "8.11.0",
"eslint-config-next": "12.1.0"
}
}
从我读过的所有内容来看,这应该很简单。谁能告诉我哪里出错了。
蒂亚,
比尔
我的非常相似,但我更愿意使用 Suspense
不同的方式
<Suspense fallback={null}>
<Model src={src} containerRef={containerRef.current} />
</Suspense>
我还添加了错误边界以防止因渲染而导致的任何崩溃
import { withErrorBoundary } from 'react-error-boundary';
// ...
export default withErrorBoundary(ModelViewer, {
FallbackComponent: () => (<div>An error occured</div>),
onError: (err: Error, info: {componentStack: string}) => console.error(err, info),
});
我已将 React、Fiber 和 Drei 更新到最新版本。这导致我最初发布的代码起作用(使用 React 中的 Suspense)。这是关于变化的:悬念。
import { Suspense } from 'react'
import { Canvas } from '@react-three/fiber'
import { useGLTF } from '@react-three/drei'
function Model() {
const gltf = useGLTF('https://thinkuldeep.com/modelviewer/Astronaut.glb')
return (<primitive object={gltf.scene} />)
}
export default function Home() {
return (
<div>
<Suspense>
<Canvas>
<ambientLight />
<Model />
</Canvas>
</Suspense>
</div>
)
}
以下是我使用的版本:
{
"name": "cfgnext-updated",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@react-three/drei": "^9.0.1",
"@react-three/fiber": "^8.0.6",
"next": "12.1.4",
"react": "18.0.0",
"react-dom": "18.0.0"
},
"devDependencies": {
"eslint": "8.12.0",
"eslint-config-next": "12.1.4"
}
}
我想我正在关注 react-three 文档和许多其他示例,但无法让 drei useGLTF 像其他人那样工作。
我有一个简单的、从零开始的 Next|React|react-three/fiber 项目。我只是想加载示例宇航员并显示它。
我相信以下代码在一段时间内确实运行良好。经过一些小的更改和撤消后,我想我回到了相同的代码,但现在不起作用。 (我试过使用和不使用 Suspense。)
import { Canvas, Suspense } from '@react-three/fiber'
import { useGLTF } from '@react-three/drei'
function Model() {
const gltf = useGLTF('https://thinkuldeep.com/modelviewer/Astronaut.glb')
return (<primitive object={gltf.scene} />)
}
export default function Home() {
return (
<div>
{/* <Suspense> */}
<Canvas>
<ambientLight />
<Model />
</Canvas>
{/* </Suspense> */}
</div>
)
}
控制台消息如下:
这是我的 package.json:
{
"name": "cfgnext",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@react-three/drei": "^8.18.10",
"@react-three/fiber": "^7.0.26",
"next": "12.1.0",
"react": "17.0.2",
"react-dom": "^17.0.2",
"styled-components": "^5.3.3"
},
"devDependencies": {
"eslint": "8.11.0",
"eslint-config-next": "12.1.0"
}
}
从我读过的所有内容来看,这应该很简单。谁能告诉我哪里出错了。
蒂亚, 比尔
我的非常相似,但我更愿意使用 Suspense
不同的方式
<Suspense fallback={null}>
<Model src={src} containerRef={containerRef.current} />
</Suspense>
我还添加了错误边界以防止因渲染而导致的任何崩溃
import { withErrorBoundary } from 'react-error-boundary';
// ...
export default withErrorBoundary(ModelViewer, {
FallbackComponent: () => (<div>An error occured</div>),
onError: (err: Error, info: {componentStack: string}) => console.error(err, info),
});
我已将 React、Fiber 和 Drei 更新到最新版本。这导致我最初发布的代码起作用(使用 React 中的 Suspense)。这是关于变化的:悬念。
import { Suspense } from 'react'
import { Canvas } from '@react-three/fiber'
import { useGLTF } from '@react-three/drei'
function Model() {
const gltf = useGLTF('https://thinkuldeep.com/modelviewer/Astronaut.glb')
return (<primitive object={gltf.scene} />)
}
export default function Home() {
return (
<div>
<Suspense>
<Canvas>
<ambientLight />
<Model />
</Canvas>
</Suspense>
</div>
)
}
以下是我使用的版本:
{
"name": "cfgnext-updated",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@react-three/drei": "^9.0.1",
"@react-three/fiber": "^8.0.6",
"next": "12.1.4",
"react": "18.0.0",
"react-dom": "18.0.0"
},
"devDependencies": {
"eslint": "8.12.0",
"eslint-config-next": "12.1.4"
}
}