[READ-ONLY] Mirror of https://github.com/flo-bit/room. tiny 3d rooms saved locally or in your bluesky account, svelte/threlte
flo-bit.dev/room/
3.3 kB
116 lines
1<!--
2Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf
3Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/cabinetBedDrawer.glb -t -s
4-->
5
6<script lang="ts">
7 import type * as THREE from 'three';
8
9 import type { Snippet } from 'svelte';
10 import { T, type Props } from '@threlte/core';
11 import { useGltf } from '@threlte/extras';
12 import { base } from '$app/paths';
13
14 let {
15 fallback,
16 error,
17 children,
18 ref = $bindable(),
19 colors,
20 opacity,
21 ...props
22 }: Props<THREE.Group> & {
23 ref?: THREE.Group;
24 children?: Snippet<[{ ref: THREE.Group }]>;
25 fallback?: Snippet;
26 error?: Snippet<[{ error: Error }]>;
27 colors?: (number | string)[];
28 opacity?: number;
29 } = $props();
30
31 type GLTFResult = {
32 nodes: {
33 Mesh_cabinetBedDrawer: THREE.Mesh;
34 Mesh_cabinetBedDrawer_1: THREE.Mesh;
35 Mesh_door: THREE.Mesh;
36 Mesh_door_1: THREE.Mesh;
37 Mesh_drawer: THREE.Mesh;
38 Mesh_drawer_1: THREE.Mesh;
39 };
40 materials: {
41 wood: THREE.MeshStandardMaterial;
42 _defaultMat: THREE.MeshStandardMaterial;
43 metal: THREE.MeshStandardMaterial;
44 };
45 };
46
47 const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/cabinetBedDrawer.glb');
48</script>
49
50<T.Group bind:ref dispose={false} {...props}>
51 {#await gltf}
52 {@render fallback?.()}
53 {:then gltf}
54 <T.Group position={[-0.12, 0.0, 0.1]}>
55 <T.Mesh
56 castShadow
57 receiveShadow
58 geometry={gltf.nodes.Mesh_cabinetBedDrawer.geometry}
59 material={gltf.materials.wood.clone()}
60 material.color={colors?.[0] ?? gltf.materials.wood.color}
61 material.opacity={opacity ?? gltf.materials.wood.opacity}
62 material.transparent={opacity !== undefined}
63 />
64 <T.Mesh
65 castShadow
66 receiveShadow
67 geometry={gltf.nodes.Mesh_cabinetBedDrawer_1.geometry}
68 material={gltf.materials._defaultMat}
69 />
70 <T.Group position={[0.02, 0.05, -0.01]}>
71 <T.Mesh
72 castShadow
73 receiveShadow
74 geometry={gltf.nodes.Mesh_door.geometry}
75 material={gltf.materials.wood.clone()}
76 material.color={colors?.[0] ?? gltf.materials.wood.color}
77 material.opacity={opacity ?? gltf.materials.wood.opacity}
78 material.transparent={opacity !== undefined}
79 />
80 <T.Mesh
81 castShadow
82 receiveShadow
83 geometry={gltf.nodes.Mesh_door_1.geometry}
84 material={gltf.materials.metal.clone()}
85 material.color={colors?.[1] ?? gltf.materials.metal.color}
86 material.opacity={opacity ?? gltf.materials.metal.opacity}
87 material.transparent={opacity !== undefined}
88 />
89 </T.Group>
90 <T.Group position={[0.02, 0.17, -0.16]}>
91 <T.Mesh
92 castShadow
93 receiveShadow
94 geometry={gltf.nodes.Mesh_drawer.geometry}
95 material={gltf.materials.wood.clone()}
96 material.color={colors?.[0] ?? gltf.materials.wood.color}
97 material.opacity={opacity ?? gltf.materials.wood.opacity}
98 material.transparent={opacity !== undefined}
99 />
100 <T.Mesh
101 castShadow
102 receiveShadow
103 geometry={gltf.nodes.Mesh_drawer_1.geometry}
104 material={gltf.materials.metal.clone()}
105 material.color={colors?.[1] ?? gltf.materials.metal.color}
106 material.opacity={opacity ?? gltf.materials.metal.opacity}
107 material.transparent={opacity !== undefined}
108 />
109 </T.Group>
110 </T.Group>
111 {:catch err}
112 {@render error?.({ error: err })}
113 {/await}
114
115 {@render children?.({ ref })}
116</T.Group>