diff --git a/components/canvascomponent.js b/components/canvascomponent.js
index 07fceb4..f00f19d 100644
--- a/components/canvascomponent.js
+++ b/components/canvascomponent.js
@@ -1,4 +1,4 @@
-import React, { useRef, useState } from 'react'
+import React, { useRef, useState, useEffect } from 'react'
import { Canvas, useFrame, useThree } from '@react-three/fiber'
import styles from "../styles/studio.module.css";
import { OrbitControls } from '@react-three/drei'
@@ -6,7 +6,7 @@ import { OrbitControls } from '@react-three/drei'
import { useLoader } from '@react-three/fiber'
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
import { useGLTF, useGLB } from "@react-three/drei";
-
+import { Box3, Vector3 } from 'three';
export function CanvasComponent({setCanvasRef, gltfModel}) {
return (
@@ -23,7 +23,6 @@ export function CanvasComponent({setCanvasRef, gltfModel}) {
)
}
-
function Scene({ setCanvasRef, gltfModel }) {
const { gl, camera } = useThree();
@@ -37,7 +36,7 @@ function Scene({ setCanvasRef, gltfModel }) {
// highlight-line
-
+
>
);
}
@@ -45,19 +44,49 @@ function Scene({ setCanvasRef, gltfModel }) {
function Model({ gltfModel, ...props }) {
- const { nodes, materials } = gltfModel;
-
- console.log("model loaded")
- return (
+ const modelRef = useRef();
+ const { camera, size } = useThree();
-
-
-
- );
+ useEffect(() => {
+ if (modelRef.current) {
+ // Compute the bounding box of the loaded model
+ const box = new Box3().setFromObject(modelRef.current);
+ const sizeModel = new Vector3();
+ box.getSize(sizeModel);
+
+ console.log("model size 1 is ", sizeModel)
+
+ // Determine the scaling factor
+ const maxSize = Math.max(sizeModel.x, sizeModel.y, sizeModel.z);
+ const scale = Math.min(size.width, size.height) / maxSize;
+
+
+ console.log("scaling factor is ", scale)
+ // Apply the scaling factor to the model
+ modelRef.current.scale.set(scale, scale, scale);
+
+
+ const boxAfterScaling = new Box3().setFromObject(modelRef.current);
+ const sizeModelAfterScaling = new Vector3();
+ boxAfterScaling.getSize(sizeModelAfterScaling);
+ console.log("model size after scaling is ", sizeModelAfterScaling)
+
+ const maxSizeAfterScaling = Math.max(sizeModelAfterScaling.x, sizeModelAfterScaling.y, sizeModelAfterScaling.z);
+
+ // Optional: Adjust the camera if necessary
+ camera.position.z =( maxSizeAfterScaling / (1 * Math.tan((camera.fov * Math.PI) / 360)));
+
+ console.log("camera position is ", camera.position.z)
+ camera.near = 0.1;
+ camera.far = 10000;
+ camera.updateProjectionMatrix();
+ }
+ }, [modelRef, camera]);
+
+ return ;
}
+
function Light({ brightness, color }) {
return (