@@ -46,39 +46,50 @@ export default class extends Controller {
46
46
static values = {
47
47
three : Object ,
48
48
}
49
+ private renderer : THREE . WebGLRenderer | null = null ;
49
50
50
51
connect ( ) {
51
52
this . dispatchEvent ( 'pre-connect' , {
52
53
options : this . threeValue ,
53
54
} ) ;
54
55
56
+ const threeValue = this . threeValue ;
57
+ this . renderer = new THREE . WebGLRenderer ( ) ;
58
+
59
+ this . createScene ( threeValue ) ;
60
+ }
61
+
62
+
63
+ createScene ( data : any ) {
64
+ if ( this . renderer === null ) {
65
+ return ;
66
+ }
55
67
/** init renderer */
56
- const renderer = new THREE . WebGLRenderer ( ) ;
57
- const rendererValue = this . threeValue . renderer ;
58
- renderer . setSize ( rendererValue . width ?? window . innerWidth , rendererValue . height ?? window . innerHeight ) ;
59
- this . element . appendChild ( renderer . domElement ) ;
68
+ const rendererValue = data . renderer ;
69
+ this . renderer ?. setSize ( rendererValue . width ?? window . innerWidth , rendererValue . height ?? window . innerHeight ) ;
70
+ this . element . appendChild ( this . renderer . domElement ) ;
60
71
// /** init scene */
61
72
const sceneValue = rendererValue . scene ;
62
73
let scene = new THREE . Scene ( ) ;
63
- const light = new THREE . AmbientLight ( 0x404040 ) ; // Lumière ambiante
74
+ const light = new THREE . AmbientLight ( 0x404040 ) ;
64
75
scene . add ( light ) ;
65
76
66
77
if ( sceneValue . material . color ) {
67
78
scene . background = new THREE . Color ( sceneValue . material . color ) ;
68
79
}
69
80
if ( sceneValue . material . map ) {
70
81
const texture = new THREE . TextureLoader ( ) . load ( sceneValue . material . map ) ;
71
- if ( sceneValue . material . skybox )
72
- texture . mapping = THREE . EquirectangularReflectionMapping ;
82
+ if ( sceneValue . material . skybox )
83
+ texture . mapping = THREE . EquirectangularReflectionMapping ;
73
84
scene . background = texture ;
74
-
75
- }
76
-
85
+
86
+ }
87
+
77
88
78
89
/** cameras */
79
90
const cameras : THREE . Camera [ ] = [ ] ;
80
91
for ( let cameraData of rendererValue . cameras ) {
81
- cameras . push ( this . createCamera ( cameraData , renderer ) ) ;
92
+ cameras . push ( this . createCamera ( cameraData , this . renderer ) ) ;
82
93
}
83
94
84
95
/** lights */
@@ -88,12 +99,11 @@ export default class extends Controller {
88
99
89
100
/** controls */
90
101
if ( rendererValue . controls ) {
91
- this . setControls ( cameras [ 0 ] , renderer ) ;
102
+ this . setControls ( cameras [ 0 ] , this . renderer ) ;
92
103
}
93
104
94
105
/** load 3d models */
95
106
for ( let modelData of this . threeValue . renderer . scene . models ) {
96
- console . log ( modelData ) ;
97
107
this . createModel ( modelData , scene ) ;
98
108
}
99
109
@@ -117,15 +127,15 @@ export default class extends Controller {
117
127
mesh . position . y += animation . translation . y ;
118
128
mesh . position . z = animation . translation . z ;
119
129
}
120
- renderer . render ( scene , cameras [ 0 ] ) ;
130
+ this . renderer ? .render ( scene , cameras [ 0 ] ) ;
121
131
122
132
requestAnimationFrame ( animate ) ;
123
133
} ;
124
134
125
135
animate ( ) ;
126
136
127
137
this . dispatchEvent ( 'connect' , {
128
- renderer : renderer ,
138
+ renderer : this . renderer ,
129
139
scene : scene ,
130
140
} ) ;
131
141
}
@@ -242,6 +252,28 @@ export default class extends Controller {
242
252
this . transform ( model . scene , modelData ) ;
243
253
scene . add ( model . scene ) ;
244
254
255
+ model . scene . traverse ( function ( object ) {
256
+ if ( object instanceof THREE . Mesh ) {
257
+ // const material = object.material;
258
+ // if(material.isMaterial && material.type=='MeshStandardMaterial') {
259
+ // material.dispose();
260
+ // object.material = new THREE.MeshBasicMaterial();
261
+ // object.material.color = 'green';
262
+ // }
263
+ }
264
+ // // Supposons que vous voulez changer la texture du premier matériau trouvé
265
+ // const material = child.material;
266
+
267
+ // // Charger une nouvelle texture
268
+ // const textureLoader = new THREE.TextureLoader();
269
+ // textureLoader.load('path/to/your/new-texture.jpg', function(texture) {
270
+ // // Mettre à jour la texture du matériau
271
+ // material.map = texture;
272
+ // material.needsUpdate = true; // Indiquer que le matériau doit être mis à jour
273
+ // });
274
+ // }
275
+ } ) ;
276
+
245
277
const mixer = new THREE . AnimationMixer ( model . scene ) ;
246
278
const clock = new THREE . Clock ( ) ;
247
279
if ( animation . playClip ) {
@@ -273,5 +305,12 @@ export default class extends Controller {
273
305
private dispatchEvent ( name : string , payload : any ) {
274
306
this . dispatch ( name , { detail : payload , prefix : 'ux:threejs' } ) ;
275
307
}
308
+
309
+ threeValueChanged ( ) : void {
310
+ const threeValue = this . threeValue ;
311
+
312
+ this . createScene ( threeValue ) ;
313
+
314
+ }
276
315
}
277
316
0 commit comments