Spaces:
Running
Running
| <!-- | |
| Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf | |
| Command: npx @threlte/gltf@3.0.1 /Users/julienblanchon/Downloads/gpu/scene.gltf --output ./src/lib/components/3d/elements/gpu/ --types | |
| Author: Cem Gürbüz (https://sketchfab.com/cemgurbuzz) | |
| License: CC-BY-NC-4.0 (http://creativecommons.org/licenses/by-nc/4.0/) | |
| Source: https://sketchfab.com/3d-models/nvidia-geforce-rtx-3090-9b7cd73fefd5435f99f891567f5a9c2e | |
| Title: Nvidia GeForce RTX 3090 | |
| --> | |
| <script lang="ts"> | |
| import type * as THREE from "three"; | |
| import type { Snippet } from "svelte"; | |
| import { T, type Props } from "@threlte/core"; | |
| import { useGltf } from "@threlte/extras"; | |
| let { | |
| fan_rotation = 0, | |
| fallback, | |
| error, | |
| children, | |
| ref = $bindable(), | |
| ...props | |
| }: Props<THREE.Group<THREE.Object3DEventMap>> & { | |
| fan_rotation?: number; | |
| ref?: THREE.Group<THREE.Object3DEventMap> | undefined; | |
| children?: Snippet<[{ ref: THREE.Group<THREE.Object3DEventMap> | undefined }]>; | |
| fallback?: Snippet; | |
| error?: Snippet<[{ error: Error }]>; | |
| } = $props(); | |
| type GLTFResult = { | |
| nodes: { | |
| Metal_Frame_Metal_0: THREE.Mesh; | |
| Front_Cover_Black_0: THREE.Mesh; | |
| Fan_Circle_Black_Fan_0: THREE.Mesh; | |
| Fan_F_Black_Fan_0: THREE.Mesh; | |
| Fan_F_Slot1_0: THREE.Mesh; | |
| Front_Cover_U_Black_0: THREE.Mesh; | |
| Front_Cover_T_Black_0: THREE.Mesh; | |
| Fan_Circle_B_Black_Fan_0: THREE.Mesh; | |
| Grills_U_Metal_Black_0: THREE.Mesh; | |
| Grills_T_Metal_Black_0: THREE.Mesh; | |
| Plane010_Black001_0: THREE.Mesh; | |
| Socket_Slot_0: THREE.Mesh; | |
| Side_Metal_Part_Metal_S_0: THREE.Mesh; | |
| Grills_F003_Metal_Black_0: THREE.Mesh; | |
| Grills_F002_Metal_Black_0: THREE.Mesh; | |
| Fan_B_Black_Fan_0: THREE.Mesh; | |
| Fan_B_Slot1_0: THREE.Mesh; | |
| }; | |
| materials: { | |
| Metal: THREE.MeshStandardMaterial; | |
| Black: THREE.MeshStandardMaterial; | |
| Black_Fan: THREE.MeshStandardMaterial; | |
| ["Slot.1"]: THREE.MeshStandardMaterial; | |
| Metal_Black: THREE.MeshStandardMaterial; | |
| ["Black.001"]: THREE.MeshStandardMaterial; | |
| Slot: THREE.MeshStandardMaterial; | |
| Metal_S: THREE.MeshStandardMaterial; | |
| }; | |
| }; | |
| const gltf = useGltf<GLTFResult>("/gpu/scene.gltf"); | |
| </script> | |
| <T.Group bind:ref dispose={false} {...props as any}> | |
| {#await gltf} | |
| {@render fallback?.()} | |
| {:then gltf} | |
| <T.Group scale={0.01}> | |
| <T.Group position={[127.5, 88.51, 10.29]} rotation={[Math.PI / 2, 0.05, 0]} scale={0.3}> | |
| <T.Mesh | |
| geometry={gltf.nodes.Fan_F_Black_Fan_0.geometry} | |
| material={gltf.materials.Black_Fan} | |
| rotation={[0, fan_rotation, 0]} | |
| /> | |
| <T.Mesh geometry={gltf.nodes.Fan_F_Slot1_0.geometry} material={gltf.materials["Slot.1"]} /> | |
| </T.Group> | |
| <T.Group | |
| position={[-123.9, 88.51, -37.82]} | |
| rotation={[Math.PI / 2, -0.05, Math.PI]} | |
| scale={0.3} | |
| > | |
| <T.Mesh | |
| geometry={gltf.nodes.Fan_B_Black_Fan_0.geometry} | |
| material={gltf.materials.Black_Fan} | |
| rotation={[0, fan_rotation, 0]} | |
| /> | |
| <T.Mesh geometry={gltf.nodes.Fan_B_Slot1_0.geometry} material={gltf.materials["Slot.1"]} /> | |
| </T.Group> | |
| <T.Mesh | |
| geometry={gltf.nodes.Metal_Frame_Metal_0.geometry} | |
| material={gltf.materials.Metal} | |
| position={[0, 88.3, -8.47]} | |
| rotation={[Math.PI / 2, 0, 0]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Front_Cover_Black_0.geometry} | |
| material={gltf.materials.Black} | |
| position={[-122.3, 89.69, 12.11]} | |
| rotation={[Math.PI / 2, 0, 0]} | |
| scale={[1, 1, 0.84]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Fan_Circle_Black_Fan_0.geometry} | |
| material={gltf.materials.Black_Fan} | |
| position={[127.5, 88.51, 10.29]} | |
| rotation={[Math.PI / 2, 0, 0]} | |
| scale={0.79} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Front_Cover_U_Black_0.geometry} | |
| material={gltf.materials.Black} | |
| position={[0.02, 26.08, 14.09]} | |
| rotation={[Math.PI / 2, 0, 0]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Front_Cover_T_Black_0.geometry} | |
| material={gltf.materials.Black} | |
| position={[-4.75, 163.4, 14.09]} | |
| rotation={[-Math.PI / 2, 0, -Math.PI]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Fan_Circle_B_Black_Fan_0.geometry} | |
| material={gltf.materials.Black_Fan} | |
| position={[-124.15, 88.51, -40.18]} | |
| rotation={[Math.PI / 2, 0, Math.PI]} | |
| scale={0.79} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Grills_U_Metal_Black_0.geometry} | |
| material={gltf.materials.Metal_Black} | |
| position={[-0.12, 3.16, 3.09]} | |
| rotation={[Math.PI / 2, -Math.PI / 4, 0]} | |
| scale={[0.55, 11.75, 0.55]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Grills_T_Metal_Black_0.geometry} | |
| material={gltf.materials.Metal_Black} | |
| position={[0.8, 174.49, 3.09]} | |
| rotation={[-Math.PI / 2, Math.PI / 4, -Math.PI]} | |
| scale={[0.55, 11.75, 0.55]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Plane010_Black001_0.geometry} | |
| material={gltf.materials["Black.001"]} | |
| position={[121.84, 88.42, -34.24]} | |
| rotation={[-Math.PI / 2, 0, -Math.PI]} | |
| scale={[1, 1, 0.84]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Socket_Slot_0.geometry} | |
| material={gltf.materials.Slot} | |
| position={[-149.71, 187.47, -39.01]} | |
| rotation={[Math.PI / 2, 0, 0]} | |
| scale={[1, 1.93, 1]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Side_Metal_Part_Metal_S_0.geometry} | |
| material={gltf.materials.Metal_S} | |
| position={[-225.87, 118.09, -12.54]} | |
| rotation={[Math.PI / 2, 0, 0]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Grills_F003_Metal_Black_0.geometry} | |
| material={gltf.materials.Metal_Black} | |
| position={[131.49, 88.84, -23.02]} | |
| rotation={[Math.PI / 2, 0, 0]} | |
| scale={[1, 1, 1.02]} | |
| /> | |
| <T.Mesh | |
| geometry={gltf.nodes.Grills_F002_Metal_Black_0.geometry} | |
| material={gltf.materials.Metal_Black} | |
| position={[-128.18, 88.84, -4.17]} | |
| rotation={[Math.PI / 2, 0, Math.PI]} | |
| scale={[1, 0.97, 1.02]} | |
| /> | |
| </T.Group> | |
| {:catch err} | |
| {@render error?.({ error: err })} | |
| {/await} | |
| {@render children?.({ ref })} | |
| </T.Group> | |