| 123456789101112131415161718192021222324252627282930313233 |
- import React, { Suspense, useEffect, useMemo, useRef ,useState} from 'react'
- import { Canvas, useThree } from '@react-three/fiber'
- import Scene from './scene'
- // 获取 URL 参数 src:完整模型链接 max:最大缩放比 min:最小缩放比
- function readParams() {
- const params = new URLSearchParams(window.location.search)
- const src = params.get('src') || ''
- const rawMin = Number(params.get('min'))
- const rawMax = Number(params.get('max'))
- const minZoom = Number.isFinite(rawMin) && rawMin > 0 ? rawMin : 1
- const maxZoom = Number.isFinite(rawMax) && rawMax > 0 ? rawMax : 4
- let zoomMin = Math.min(minZoom, maxZoom)
- const zoomMax = Math.max(minZoom, maxZoom)
- zoomMin = Math.max(1, zoomMin)
- const progressColor = params.get('progressColor')
- return { src, zoomMin, zoomMax, progressColor }
- }
- export default function App() {
- const { src, zoomMin, zoomMax, progressColor } = useMemo(readParams, [])
- return (
- <div style={{ width: '100vw', height: '100vh'}}>
- <Canvas
- dpr={[1, 2]}
- gl={{ antialias: true }}
- style={{ touchAction: 'none' }}
- >
- <Scene url={src} zoomMin={zoomMin} zoomMax={zoomMax} progressColor={progressColor} />
- </Canvas>
- </div>
- )
- }
|