@@ -12,22 +12,35 @@ var Viewport = function ( editor ) {
12
12
13
13
container . add ( new Viewport . Info ( editor ) ) ;
14
14
15
+ //
16
+
17
+ var renderer = null ;
18
+
19
+ var camera = editor . camera ;
15
20
var scene = editor . scene ;
16
21
var sceneHelpers = editor . sceneHelpers ;
17
22
18
23
var objects = [ ] ;
19
24
25
+ //
26
+
27
+ var vrEffect , vrControls ;
28
+
29
+ if ( WEBVR . isAvailable ( ) === true ) {
30
+
31
+ var vrCamera = new THREE . PerspectiveCamera ( ) ;
32
+ vrCamera . projectionMatrix = camera . projectionMatrix ;
33
+ camera . add ( vrCamera ) ;
34
+
35
+ }
36
+
20
37
// helpers
21
38
22
39
var grid = new THREE . GridHelper ( 30 , 60 ) ;
23
40
sceneHelpers . add ( grid ) ;
24
41
25
42
//
26
43
27
- var camera = editor . camera ;
28
-
29
- //
30
-
31
44
var box = new THREE . Box3 ( ) ;
32
45
33
46
var selectionBox = new THREE . BoxHelper ( ) ;
@@ -278,6 +291,12 @@ var Viewport = function ( editor ) {
278
291
279
292
} ) ;
280
293
294
+ signals . enterVR . add ( function ( ) {
295
+
296
+ vrEffect . isPresenting ? vrEffect . exitPresent ( ) : vrEffect . requestPresent ( ) ;
297
+
298
+ } ) ;
299
+
281
300
var clearColor ;
282
301
283
302
signals . themeChanged . add ( function ( value ) {
@@ -341,6 +360,19 @@ var Viewport = function ( editor ) {
341
360
342
361
container . dom . appendChild ( renderer . domElement ) ;
343
362
363
+ if ( WEBVR . isAvailable ( ) === true ) {
364
+
365
+ vrControls = new THREE . VRControls ( vrCamera ) ;
366
+ vrEffect = new THREE . VREffect ( renderer ) ;
367
+
368
+ window . addEventListener ( 'vrdisplaypresentchange' , function ( event ) {
369
+
370
+ effect . isPresenting ? signals . enteredVR . dispatch ( ) : signals . exitedVR . dispatch ( ) ;
371
+
372
+ } , false ) ;
373
+
374
+ }
375
+
344
376
render ( ) ;
345
377
346
378
} ) ;
@@ -537,12 +569,6 @@ var Viewport = function ( editor ) {
537
569
538
570
//
539
571
540
- var renderer = null ;
541
-
542
- animate ( ) ;
543
-
544
- //
545
-
546
572
function updateFog ( root ) {
547
573
548
574
if ( root . fog ) {
@@ -581,30 +607,50 @@ var Viewport = function ( editor ) {
581
607
582
608
}
583
609
610
+ }
611
+ */
612
+
613
+ if ( vrEffect && vrEffect . isPresenting ) {
614
+
584
615
render ( ) ;
585
616
586
617
}
587
618
588
- */
589
-
590
619
}
591
620
592
621
function render ( ) {
593
622
594
623
sceneHelpers . updateMatrixWorld ( ) ;
595
624
scene . updateMatrixWorld ( ) ;
596
625
597
- renderer . clear ( ) ;
598
- renderer . render ( scene , camera ) ;
626
+ if ( vrEffect && vrEffect . isPresenting ) {
627
+
628
+ vrControls . update ( ) ;
629
+
630
+ camera . updateMatrixWorld ( ) ;
631
+ renderer . clear ( ) ;
632
+
633
+ vrEffect . render ( scene , vrCamera ) ;
634
+ vrEffect . render ( sceneHelpers , vrCamera ) ;
635
+
636
+ } else {
599
637
600
- if ( renderer instanceof THREE . RaytracingRenderer === false ) {
638
+ renderer . clear ( ) ;
639
+ renderer . render ( scene , camera ) ;
601
640
602
- renderer . render ( sceneHelpers , camera ) ;
641
+ if ( renderer instanceof THREE . RaytracingRenderer === false ) {
642
+
643
+ renderer . render ( sceneHelpers , camera ) ;
644
+
645
+ }
603
646
604
647
}
605
648
649
+
606
650
}
607
651
652
+ requestAnimationFrame ( animate ) ;
653
+
608
654
return container ;
609
655
610
656
} ;
0 commit comments