@@ -49,97 +49,90 @@ document.addEventListener('DOMContentLoaded', function () {
4949 }
5050 } ;
5151
52- // Initialize simulation display
5352 updateStressDisplay ( ) ;
54-
55- // --- 3D Scene Script using Three.js ---
5653
57- // Scene Setup
54+ // --- Optimized 3D Scene Implementation ---
5855 const scene = new THREE . Scene ( ) ;
59-
60- // Camera Fix: Adjust near plane and position
56+
57+ // Precision Camera Setup
6158 const camera = new THREE . PerspectiveCamera (
62- 75 ,
63- window . innerWidth / window . innerHeight ,
64- 0.01 , // Changed from 0.1 to 0.01
59+ 75 ,
60+ window . innerWidth / window . innerHeight ,
61+ 0.01 ,
6562 1000
6663 ) ;
67- camera . position . set ( 0 , 0 , 0.001 ) ; // Position closer to center
64+ camera . position . set ( 0 , 0 , 0.001 ) ;
6865
69- // Renderer Fix: Add alpha channel for debugging
66+ // Transparent Renderer Configuration
7067 const renderer = new THREE . WebGLRenderer ( {
7168 antialias : true ,
72- alpha : true // Enable transparency
69+ alpha : true
7370 } ) ;
74- renderer . setClearColor ( 0x000000 , 0 ) ; // Transparent background
71+ renderer . setClearColor ( 0x000000 , 0 ) ;
7572 renderer . setSize ( window . innerWidth , window . innerHeight ) ;
7673 renderer . setPixelRatio ( window . devicePixelRatio ) ;
7774 document . body . appendChild ( renderer . domElement ) ;
7875
79- // Geometry Fix: Reduce complexity for better performance
80- const geometry = new THREE . SphereGeometry ( 500 , 32 , 16 ) ; // Reduced segments
81- geometry . scale ( - 1 , 1 , 1 ) ; // Flip normals inward
76+ // Optimized Sphere Geometry
77+ const geometry = new THREE . SphereGeometry ( 500 , 32 , 16 ) ;
78+ geometry . scale ( - 1 , 1 , 1 ) ;
8279
83- // Texture Loading Fix: Add success logging and force update
80+ // Robust Texture Loading System
8481 const textureLoader = new THREE . TextureLoader ( ) ;
8582 textureLoader . load (
8683 'img/er.png' ,
8784 ( texture ) => {
88- console . log ( 'Texture loaded successfully ' ) ;
85+ console . log ( '360° Environment Loaded ' ) ;
8986 const material = new THREE . MeshBasicMaterial ( {
9087 map : texture ,
9188 side : THREE . BackSide ,
9289 transparent : true
9390 } ) ;
94- const sphere = new THREE . Mesh ( geometry , material ) ;
95- scene . add ( sphere ) ;
96- needsUpdate = true ; // Force render after load
91+ scene . add ( new THREE . Mesh ( geometry , material ) ) ;
92+ needsUpdate = true ;
9793 } ,
9894 undefined ,
9995 ( err ) => {
100- console . error ( 'Texture error:' , err ) ;
101- // Visible fallback material
96+ console . error ( 'Texture Error:' , err ) ;
10297 const material = new THREE . MeshBasicMaterial ( {
103- color : 0xFF0000 , // Bright red for visibility
98+ color : 0x404040 ,
10499 side : THREE . BackSide
105100 } ) ;
106101 scene . add ( new THREE . Mesh ( geometry , material ) ) ;
107102 needsUpdate = true ;
108103 }
109104 ) ;
110105
111- // Debug Helpers: Add axes visualization
112- scene . add ( new THREE . AxesHelper ( 50 ) ) ; // Red=X, Green=Y, Blue=Z
113-
114- // VR Configuration (Temporarily Disabled)
115- // renderer.xr.enabled = true;
116- // renderer.xr.setReferenceSpaceType('local');
117- // document.body.appendChild(VRButton.createButton(renderer));
118-
119- // Controls (Mouse/Touch)
106+ // Interactive Controls
120107 const controls = new THREE . OrbitControls ( camera , renderer . domElement ) ;
121108 controls . enableZoom = false ;
122- controls . enablePan = false ;
123109 controls . enableDamping = true ;
110+ controls . dampingFactor = 0.05 ;
124111 controls . rotateSpeed = - 0.25 ;
125112
126- // Window resize handler
113+ // Adaptive Rendering System
114+ let needsUpdate = true ;
115+ renderer . setAnimationLoop ( ( ) => {
116+ if ( needsUpdate || controls . isRotating ) {
117+ controls . update ( ) ;
118+ renderer . render ( scene , camera ) ;
119+ needsUpdate = false ;
120+ }
121+ } ) ;
122+
123+ // Responsive Layout Handling
127124 window . addEventListener ( 'resize' , ( ) => {
128125 camera . aspect = window . innerWidth / window . innerHeight ;
129126 camera . updateProjectionMatrix ( ) ;
130127 renderer . setSize ( window . innerWidth , window . innerHeight ) ;
128+ needsUpdate = true ;
131129 } ) ;
132130
133- // Animation Loop Fix: Ensure continuous updates
134- let needsUpdate = true ;
135- renderer . setAnimationLoop ( ( ) => {
136- controls . update ( ) ;
137- renderer . render ( scene , camera ) ;
138- } ) ;
139-
140- // Cleanup on page unload
131+ // Resource Cleanup
141132 window . addEventListener ( 'beforeunload' , ( ) => {
142133 clearInterval ( simulationInterval ) ;
143134 renderer . dispose ( ) ;
135+ controls . dispose ( ) ;
136+ textureLoader = null ;
144137 } ) ;
145138} ) ;
0 commit comments