尝试从 mongodb 数据库加载 gltf link 反应三纤维
Trying to load the gltf link from the mongodb database in react three fiber
我一直在尝试从数据库加载我的 gltf 文件,但它不起作用。我尝试为 model.js 创建单独的页面,但仍然没有结果。在网上搜索了很多解决方案,但没有成功。请帮忙。
代码如下:
import React, { useState, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux'
import { Canvas } from "@react-three/fiber";
import { useGLTF } from '@react-three/drei'
import { useLoader } from "@react-three/fiber";
import { Environment, OrbitControls } from "@react-three/drei";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { Suspense } from "react";
import {
listModelDetails
} from '../actions/ModelActions'
const Model = () => {
const gltf = useLoader(GLTFLoader, `/${model.content}`);
return <primitive object={gltf} scale={0.005} />;
}
export default function ModelScreen({ history, match }) {
const dispatch = useDispatch()
const ModelDetails = useSelector((state) => state.ModelDetails)
const { error, model } = ModelDetails
useEffect(() => {
if (!course._id || model._id !== match.params.id) {
dispatch(listModelDetails(match.params.id))
}
}, [dispatch, match])
return (
<>
<div style={{width: '70vw', height: '70vh'}}>
<Canvas>
<Suspense>
<Model />
<OrbitControls />
<Environment preset="sunset" background />
</Suspense>
</Canvas>
</div>
</>
);
}
in HomeScreen.js(有模型列表的地方):
<>
<h1>Top Courses</h1>
<Row>
{courses.map((course) => (
<Col key={course._id} xs={6} md={6} lg={4} xl={3} height='100'>
<Course course={course} />
</Col>
))}
</Row>
</>
在ModelScreen.js(我们实际加载模型的地方):
const Model = ({ url }) => {
const gltf = useLoader(GLTFLoader, `${url}`);
return <primitive object={gltf.scene} scale={0.4} />;
};
return (
<>
<div style={{width: '70vw', height: '70vh'}}>
<Canvas>
<Suspense fallback={null}>
<Model url={course.content} />
<OrbitControls autoRotate />
<Environment preset="sunset" background />
</Suspense>
</Canvas>
</div>
<Meta title={course.name} />
<h2>{course.name}</h2>
<br />
<br />
<h3>Description:</h3>
<h3>{course.description}</h3>
</>
);
}
当然有些地方我遗漏了。但我认为这对你来说更容易做到!祝你好运!
我一直在尝试从数据库加载我的 gltf 文件,但它不起作用。我尝试为 model.js 创建单独的页面,但仍然没有结果。在网上搜索了很多解决方案,但没有成功。请帮忙。 代码如下:
import React, { useState, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux'
import { Canvas } from "@react-three/fiber";
import { useGLTF } from '@react-three/drei'
import { useLoader } from "@react-three/fiber";
import { Environment, OrbitControls } from "@react-three/drei";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { Suspense } from "react";
import {
listModelDetails
} from '../actions/ModelActions'
const Model = () => {
const gltf = useLoader(GLTFLoader, `/${model.content}`);
return <primitive object={gltf} scale={0.005} />;
}
export default function ModelScreen({ history, match }) {
const dispatch = useDispatch()
const ModelDetails = useSelector((state) => state.ModelDetails)
const { error, model } = ModelDetails
useEffect(() => {
if (!course._id || model._id !== match.params.id) {
dispatch(listModelDetails(match.params.id))
}
}, [dispatch, match])
return (
<>
<div style={{width: '70vw', height: '70vh'}}>
<Canvas>
<Suspense>
<Model />
<OrbitControls />
<Environment preset="sunset" background />
</Suspense>
</Canvas>
</div>
</>
);
}
in HomeScreen.js(有模型列表的地方):
<>
<h1>Top Courses</h1>
<Row>
{courses.map((course) => (
<Col key={course._id} xs={6} md={6} lg={4} xl={3} height='100'>
<Course course={course} />
</Col>
))}
</Row>
</>
在ModelScreen.js(我们实际加载模型的地方):
const Model = ({ url }) => {
const gltf = useLoader(GLTFLoader, `${url}`);
return <primitive object={gltf.scene} scale={0.4} />;
};
return (
<>
<div style={{width: '70vw', height: '70vh'}}>
<Canvas>
<Suspense fallback={null}>
<Model url={course.content} />
<OrbitControls autoRotate />
<Environment preset="sunset" background />
</Suspense>
</Canvas>
</div>
<Meta title={course.name} />
<h2>{course.name}</h2>
<br />
<br />
<h3>Description:</h3>
<h3>{course.description}</h3>
</>
);
}
当然有些地方我遗漏了。但我认为这对你来说更容易做到!祝你好运!