From 26dede87608f9ced212a3f76acd358dc4544747b Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 23 四月 2024 17:02:03 +0800 Subject: [PATCH] # --- src/components/shelf.jsx | 54 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/components/shelf.jsx b/src/components/shelf.jsx index aa2bfa3..1edf4b9 100644 --- a/src/components/shelf.jsx +++ b/src/components/shelf.jsx @@ -2,29 +2,59 @@ import { useGLTF } from '@react-three/drei'; import * as THREE from 'three'; import { MODEL_SHELF_SCALE } from '@/config/setting' +import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; + +const generateScene = async () => { + const loader = new GLTFLoader(); + const dracoLoader = new DRACOLoader(); + dracoLoader.setDecoderPath('/draco/'); + loader.setDRACOLoader(dracoLoader); + + return await new Promise((resolve, reject) => { + loader.load('/models/shelf/row.glb', function (mesh) { + console.log(mesh); + resolve(mesh.scene) + }) + }) +} const Shelf = (props) => { const { position = [0, 300, 0], rotationY = 0 } = props; - const { scene } = useGLTF('/models/shelf/row.glb'); - console.log(scene); + const dracoLoader = new DRACOLoader(); + dracoLoader.setDecoderPath('draco/'); + useGLTF.setDecoderPath('/draco/'); + // const { scene } = useGLTF('/models/shelf/row.glb', '/draco/'); - const model = useMemo(() => scene.clone(), [scene]); + const { nodes, materials } = useGLTF('/models/shelf/row.glb'); + console.log(nodes); + + + const { nodes: nodes1, materials1, animations } = useGLTF('/models/shelf/Horse.glb'); return ( <> - <mesh position={position}> - <boxGeometry args={[50, 50, 50]} /> - <meshStandardMaterial color={'hotpink'} /> - </mesh> - {/* <group rotation-y={rotationY} position={position}> - <primitive - object={model} + <group rotation-y={rotationY} position={position}> + <primitive object={generateScene()} /> + <mesh castShadow receiveShadow - scale={[MODEL_SHELF_SCALE, MODEL_SHELF_SCALE, MODEL_SHELF_SCALE]} + geometry={nodes.鐗╀欢_1001.geometry} + material={materials['鏉愯川_1.002']} + position={[0, 2, 0.3]} + rotation={[Math.PI / 2, 0, Math.PI / 2]} + scale={70} /> - </group> */} + <mesh + castShadow + receiveShadow + geometry={nodes1.mesh_0.geometry} + material={nodes1.mesh_0.material} + morphTargetDictionary={nodes1.mesh_0.morphTargetDictionary} + morphTargetInfluences={nodes1.mesh_0.morphTargetInfluences} + /> + </group> </> ) } -- Gitblit v1.9.1