[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/
4.8 kB
156 lines
1<!--
2Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf
3Command: npx @threlte/gltf@3.0.0 static/models/bedBunk.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_bedBunk: THREE.Mesh
34 Mesh_bedBunk_1: THREE.Mesh
35 Mesh_cover: THREE.Mesh
36 Mesh_cover_1: THREE.Mesh
37 pillowBottom: THREE.Mesh
38 pillowTop: THREE.Mesh
39 }
40 materials: {
41 wood: THREE.MeshStandardMaterial
42 carpetWhite: THREE.MeshStandardMaterial
43 carpet: THREE.MeshStandardMaterial
44 }
45 }
46
47 const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bedBunk.glb')
48</script>
49
50<T.Group
51 bind:ref
52 dispose={false}
53 {...props}
54>
55 <T.Group position={[-0.3, 0, 0.6]}>
56 {#await gltf}
57 {@render fallback?.()}
58 {:then gltf}
59 <T.Mesh
60 castShadow
61 receiveShadow
62 geometry={gltf.nodes.Mesh_bedBunk.geometry}
63 material={gltf.materials.wood.clone()}
64
65 material.color={colors?.[0] ?? gltf.materials.wood.color}
66 material.opacity={opacity ?? gltf.materials.wood.opacity}
67 material.transparent={opacity !== undefined}
68 />
69 <T.Mesh
70 castShadow
71 receiveShadow
72 geometry={gltf.nodes.Mesh_bedBunk_1.geometry}
73 material={gltf.materials.carpetWhite.clone()}
74 material.color={colors?.[1] ?? gltf.materials.carpetWhite.color}
75 material.opacity={opacity ?? gltf.materials.carpetWhite.opacity}
76 material.transparent={opacity !== undefined}
77 />
78 <T.Group
79 position={[-0.38, 0.2, -0.83]}
80 rotation={[0, -Math.PI / 2, 0]}
81 scale={0.5}
82 >
83 <T.Mesh
84 castShadow
85 receiveShadow
86 geometry={gltf.nodes.Mesh_cover.geometry}
87 material={gltf.materials.carpet.clone()}
88 material.color={colors?.[2] ?? gltf.materials.carpet.color}
89 material.opacity={opacity ?? gltf.materials.carpet.opacity}
90 material.transparent={opacity !== undefined}
91 />
92 <T.Mesh
93 castShadow
94 receiveShadow
95 geometry={gltf.nodes.Mesh_cover_1.geometry}
96 material={gltf.materials.carpetWhite.clone()}
97 material.color={colors?.[1] ?? gltf.materials.carpetWhite.color}
98 material.opacity={opacity ?? gltf.materials.carpetWhite.opacity}
99 material.transparent={opacity !== undefined}
100 />
101 </T.Group>
102 <T.Group
103 position={[-0.38, 0.73, -0.83]}
104 rotation={[0, -Math.PI / 2, 0]}
105 scale={0.5}
106 >
107 <T.Mesh
108 castShadow
109 receiveShadow
110 geometry={gltf.nodes.Mesh_cover.geometry}
111 material={gltf.materials.carpet.clone()}
112 material.color={colors?.[2] ?? gltf.materials.carpet.color}
113 material.opacity={opacity ?? gltf.materials.carpet.opacity}
114 material.transparent={opacity !== undefined}
115 />
116 <T.Mesh
117 castShadow
118 receiveShadow
119 geometry={gltf.nodes.Mesh_cover_1.geometry}
120 material={gltf.materials.carpetWhite.clone()}
121 material.color={colors?.[1] ?? gltf.materials.carpetWhite.color}
122 material.opacity={opacity ?? gltf.materials.carpetWhite.opacity}
123 material.transparent={opacity !== undefined}
124 />
125 </T.Group>
126 <T.Mesh
127 castShadow
128 receiveShadow
129 geometry={gltf.nodes.pillowBottom.geometry}
130 material={gltf.materials.carpetWhite.clone()}
131 material.color={colors?.[1] ?? gltf.materials.carpetWhite.color}
132 material.opacity={opacity ?? gltf.materials.carpetWhite.opacity}
133 material.transparent={opacity !== undefined}
134 position={[0.12, 0.2, -1.07]}
135 rotation={[0.13, -Math.PI / 2, 0]}
136 scale={[0.5, 0.5, 0.85]}
137 />
138 <T.Mesh
139 castShadow
140 receiveShadow
141 geometry={gltf.nodes.pillowTop.geometry}
142 material={gltf.materials.carpetWhite.clone()}
143 material.color={colors?.[1] ?? gltf.materials.carpetWhite.color}
144 material.opacity={opacity ?? gltf.materials.carpetWhite.opacity}
145 material.transparent={opacity !== undefined}
146 position={[0.12, 0.74, -1.07]}
147 rotation={[0.13, -Math.PI / 2, 0]}
148 scale={[0.5, 0.5, 0.85]}
149 />
150 {:catch err}
151 {@render error?.({ error: err })}
152 {/await}
153
154 {@render children?.({ ref })}
155 </T.Group>
156</T.Group>