[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/
2.1 kB
80 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/chairModernFrameCushion.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_chairModernFrameCushion: THREE.Mesh
34 Mesh_chairModernFrameCushion_1: THREE.Mesh
35 }
36 materials: {
37 metal: THREE.MeshStandardMaterial
38 carpetBlue: THREE.MeshStandardMaterial
39 }
40 }
41
42 const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairModernFrameCushion.glb');
43</script>
44
45<T.Group
46 bind:ref
47 dispose={false}
48 {...props}
49>
50 {#await gltf}
51 {@render fallback?.()}
52 {:then gltf}
53 <T.Mesh
54 castShadow
55 receiveShadow
56 geometry={gltf.nodes.Mesh_chairModernFrameCushion.geometry}
57 material={gltf.materials.metal.clone()}
58 material.color={colors?.[0] ?? gltf.materials.metal.color}
59 material.opacity={opacity ?? gltf.materials.metal.opacity}
60 material.transparent={opacity !== undefined}
61 position={[-0.1, 0.0, 0.1]}
62
63 />
64 <T.Mesh
65 castShadow
66 receiveShadow
67 geometry={gltf.nodes.Mesh_chairModernFrameCushion_1.geometry}
68 material={gltf.materials.carpetBlue.clone()}
69 material.color={colors?.[1] ?? gltf.materials.carpetBlue.color}
70 material.opacity={opacity ?? gltf.materials.carpetBlue.opacity}
71 material.transparent={opacity !== undefined}
72 position={[-0.1, 0.0, 0.1]}
73
74 />
75 {:catch err}
76 {@render error?.({ error: err })}
77 {/await}
78
79 {@render children?.({ ref })}
80</T.Group>