Spaces:
Running
Running
File size: 1,820 Bytes
6ce4ca6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<!-- From https://github.com/brean/urdf-viewer -->
<script lang="ts">
import { T, useLoader } from "@threlte/core";
import { DoubleSide, Mesh, type Side } from "three";
import { ColladaLoader } from "three/examples/jsm/loaders/ColladaLoader.js";
type Props = {
filename: string;
color?: string;
scale?: [number, number, number];
position?: [number, number, number];
rotation?: [number, number, number];
castShadow?: boolean;
receiveShadow?: boolean;
opacity?: number;
wireframe?: boolean;
side?: Side;
};
let {
filename,
color = "#ffffff",
scale = [1, 1, 1],
position = [0, 0, 0],
rotation = [0, 0, 0],
opacity = 1.0,
castShadow = true,
receiveShadow = true,
wireframe = false,
side = DoubleSide,
...restProps
}: Props = $props();
const sceneUp: [x: number, y: number, z: number] = [Math.PI / 2, -Math.PI / 2, -Math.PI / 2];
const { load } = useLoader(ColladaLoader);
</script>
{#await load(filename) then dae}
{@html `<!-- include dae: ${filename} ${scale} -->`}
<T.Group {scale} {position} {rotation}>
<T.Group rotation={sceneUp}>
<T.Group
scale={dae.scene.scale.toArray()}
position={dae.scene.position.toArray()}
rotation={dae.scene.rotation ? dae.scene.rotation.toArray() : [0, 0, 0]}
>
{#each dae.scene.children as obj}
{#if obj.type === "Mesh"}
{@const mesh = obj as Mesh}
<T.Mesh
{castShadow}
{receiveShadow}
geometry={mesh.geometry}
scale={mesh.scale ? mesh.scale.toArray() : [1, 1, 1]}
position={mesh.position ? mesh.position.toArray() : [0, 0, 0]}
material={mesh.material}
{...restProps}
>
<T.MeshLambertMaterial {color} {opacity} transparent={opacity < 1.0} />
</T.Mesh>
{/if}
{/each}
</T.Group>
</T.Group>
</T.Group>
{/await}
|