diff --git a/frontend/.gitignore b/frontend/.gitignore index c424a30..965ef77 100644 Binary files a/frontend/.gitignore and b/frontend/.gitignore differ diff --git a/frontend/components/model/ModelViewer.tsx b/frontend/components/model/ModelViewer.tsx index 0af618a..6ac9ebe 100644 --- a/frontend/components/model/ModelViewer.tsx +++ b/frontend/components/model/ModelViewer.tsx @@ -11,9 +11,10 @@ import { Color4, AbstractMesh, Nullable, - SceneLoader + ImportMeshAsync } from '@babylonjs/core' import '@babylonjs/loaders' + import LoadingSpinner from '../ui/LoadingSpinner' @@ -59,6 +60,12 @@ const ModelViewer: React.FC = ({ const engine = new Engine(canvas, true) engineRef.current = engine + engine.runRenderLoop(() => { + if (!isDisposedRef.current && sceneRef.current) { + sceneRef.current.render() + } + }) + const scene = new Scene(engine) sceneRef.current = scene @@ -88,12 +95,6 @@ const ModelViewer: React.FC = ({ fillLight.intensity = 0.3 fillLight.diffuse = new Color3(0.8, 0.8, 1) - engine.runRenderLoop(() => { - if (!isDisposedRef.current) { - scene.render() - } - }) - const handleResize = () => { if (!isDisposedRef.current) { engine.resize() @@ -124,6 +125,9 @@ const ModelViewer: React.FC = ({ if (!sceneRef.current || isDisposedRef.current) { return } + + const oldMeshes = sceneRef.current.meshes.slice(); + oldMeshes.forEach(m => m.dispose()); setIsLoading(true) setLoadingProgress(0) @@ -142,12 +146,7 @@ const ModelViewer: React.FC = ({ }, 100) try { - const result = await SceneLoader.ImportMeshAsync( - '', - modelPath, - '', - sceneRef.current - ) + const result = await ImportMeshAsync(modelPath, sceneRef.current) clearInterval(progressInterval) setLoadingProgress(100) @@ -196,7 +195,8 @@ const ModelViewer: React.FC = ({ } } - loadModel() + // Загрузка модлеи начинается после появления спиннера + requestIdleCallback(() => loadModel(), { timeout: 50 }) }, [modelPath, onError, onModelLoaded]) return ( diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..d753aeb --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,17 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './app/**/*.{js,ts,jsx,tsx}', + './components/**/*.{js,ts,jsx,tsx}', + './lib/**/*.{js,ts,jsx,tsx}', + './services/**/*.{js,ts,jsx,tsx}', + ], + safelist: [], + blocklist: [ + './public/**/*', + './data/**/*', + '!./assets/big-models/**/*' + ], + theme: { extend: {} }, + plugins: [], +}; \ No newline at end of file