From 51b13009926be3d41c8dfb94a96e4c9489264513 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期四, 16 五月 2024 08:34:27 +0800
Subject: [PATCH] #
---
src/components/shelf.jsx | 74 +++++++++++++++++--------------------
1 files changed, 34 insertions(+), 40 deletions(-)
diff --git a/src/components/shelf.jsx b/src/components/shelf.jsx
index 1edf4b9..387d77b 100644
--- a/src/components/shelf.jsx
+++ b/src/components/shelf.jsx
@@ -1,59 +1,53 @@
-import { useMemo } from 'react';
-import { useGLTF } from '@react-three/drei';
+import { useMemo, useState, useEffect } from 'react';
+import { useGLTF, useFBX } from '@react-three/drei';
import * as THREE from 'three';
import { MODEL_SHELF_SCALE } from '@/config/setting'
+import { useStore } from '@/store';
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)
- })
- })
-}
+import Box from './box';
+import * as Common from '../utils/common';
const Shelf = (props) => {
- const { position = [0, 300, 0], rotationY = 0 } = props;
+ const { no, position = [0, 300, 0], rotationY = 0 } = props;
+ const state = useStore();
- const dracoLoader = new DRACOLoader();
- dracoLoader.setDecoderPath('draco/');
- useGLTF.setDecoderPath('/draco/');
- // const { scene } = useGLTF('/models/shelf/row.glb', '/draco/');
+ // const { nodes, materials } = useMemo(() => {
+ // return useGLTF('/models/shelf/row.glb');
+ // }, [])
- const { nodes, materials } = useGLTF('/models/shelf/row.glb');
- console.log(nodes);
+ const model = useMemo(() => {
+ const fbx = useFBX('/models/shelf/row.fbx');
+ if (!fbx.castShadow) {
+ Common.setShadow(fbx);
+ }
+ // Common.setColor(fbx, 0x778ca3);
+ fbx.scale.set(MODEL_SHELF_SCALE.x, MODEL_SHELF_SCALE.y, MODEL_SHELF_SCALE.z);
+ return fbx.clone();
+ }, [])
-
- const { nodes: nodes1, materials1, animations } = useGLTF('/models/shelf/Horse.glb');
+ useEffect(() => {
+ state.shelfList[no] = position;
+ }, [props]);
return (
<>
<group rotation-y={rotationY} position={position}>
- <primitive object={generateScene()} />
- <mesh
+ {/* <primitive
castShadow
receiveShadow
- geometry={nodes.鐗╀欢_1001.geometry}
+ object={nodes.鐗╀欢_1001}
material={materials['鏉愯川_1.002']}
- position={[0, 2, 0.3]}
- rotation={[Math.PI / 2, 0, Math.PI / 2]}
- scale={70}
- />
- <mesh
- castShadow
- receiveShadow
- geometry={nodes1.mesh_0.geometry}
- material={nodes1.mesh_0.material}
- morphTargetDictionary={nodes1.mesh_0.morphTargetDictionary}
- morphTargetInfluences={nodes1.mesh_0.morphTargetInfluences}
- />
+ position={[0, 99, 0]}
+ scale={50000}
+ /> */}
+
+ <primitive object={model} castShadow position={[0, 1, 0]} />
+ {/* <mesh position={[0, 100, 0]}>
+ <boxGeometry args={[150, 200, 30]} />
+ <meshStandardMaterial color={'orange'} transparent={true} opacity={.5} />
+ </mesh> */}
+ {/* <Box rotationY={0} position={[0, 0, 0]} /> */}
</group>
</>
)
--
Gitblit v1.9.1