1
1
import { Scene , SphereGeometry , MeshStandardMaterial , Mesh , BoxGeometry , PerspectiveCamera , ACESFilmicToneMapping , WebGLRenderer } from 'three' ;
2
2
import { WebGLPathTracer , GradientEquirectTexture } from '..' ;
3
3
import { getScaledSettings } from './utils/getScaledSettings.js' ;
4
+ import GUI from 'three/examples/jsm/libs/lil-gui.module.min.js' ;
4
5
5
6
// init scene, renderer, camera, controls, etc
6
7
const scene = new Scene ( ) ;
@@ -14,30 +15,26 @@ const ball1 = new Mesh(
14
15
} )
15
16
) ;
16
17
const ball2 = new Mesh (
17
- sphereGeom ,
18
+ sphereGeom . clone ( ) ,
18
19
new MeshStandardMaterial ( {
19
20
color : '#ff9800' ,
20
21
roughness : 0.1 ,
21
22
metalness : 1 ,
22
23
} )
23
24
) ;
24
25
const ball3 = new Mesh (
25
- sphereGeom ,
26
+ sphereGeom . clone ( ) ,
26
27
new MeshStandardMaterial ( {
27
28
color : '#2196f3' ,
28
29
roughness : 0.2 ,
29
30
metalness : 1 ,
30
31
} )
31
32
) ;
32
- const ground = new Mesh (
33
- new BoxGeometry ( 3.5 , 0.1 , 1.5 ) ,
34
- new MeshStandardMaterial ( ) ,
35
- ) ;
36
33
37
34
ball1 . position . x = - 1 ;
38
35
ball3 . position . x = 1 ;
39
- ground . position . y = - 0.54 ;
40
- scene . add ( ball1 , ball2 , ball3 , ground ) ;
36
+
37
+ scene . add ( ball1 ) ;
41
38
42
39
// set the environment map
43
40
const texture = new GradientEquirectTexture ( ) ;
@@ -61,6 +58,23 @@ pathTracer.renderScale = settings.renderScale;
61
58
pathTracer . tiles . setScalar ( settings . tiles ) ;
62
59
pathTracer . setScene ( scene , camera ) ;
63
60
61
+ let gui = new GUI ( ) ;
62
+ const params = {
63
+ 'enable' : false ,
64
+ 'addedModel' : false
65
+ }
66
+ gui . add ( params , 'enable' ) . name ( 'Enable' ) ;
67
+
68
+ gui . add ( params , 'addedModel' ) . name ( 'Add model' ) . onChange ( ( ) => {
69
+ if ( params . addedModel ) {
70
+ scene . add ( ball2 , ball3 ) ;
71
+ pathTracer . setScene ( scene , camera ) ;
72
+ } else {
73
+ scene . remove ( ball2 , ball3 ) ;
74
+ pathTracer . setScene ( scene , camera ) ;
75
+ }
76
+ } ) ;
77
+
64
78
onResize ( ) ;
65
79
66
80
animate ( ) ;
@@ -73,7 +87,15 @@ function animate() {
73
87
requestAnimationFrame ( animate ) ;
74
88
75
89
// update the camera and render one sample
76
- pathTracer . renderSample ( ) ;
90
+ if ( params . enable ) {
91
+
92
+ pathTracer . renderSample ( ) ;
93
+
94
+ } else {
95
+
96
+ renderer . render ( scene , camera ) ;
97
+
98
+ }
77
99
78
100
}
79
101
0 commit comments