Skip to content

Commit

Permalink
JSM: Added module and TS file for WebVR.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mugen87 committed Jul 12, 2019
1 parent 7b5e5a0 commit 74fdf54
Show file tree
Hide file tree
Showing 20 changed files with 299 additions and 32 deletions.
2 changes: 1 addition & 1 deletion docs/manual/en/introduction/How-to-create-VR-content.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ <h2>Workflow</h2>
</p>

<code>
&lt;script src="/path/to/WebVR.js"&gt;&lt;/script&gt;
import { WEBVR } from 'three/examples/jsm/vr/WebVR.js';
</code>

<p>
Expand Down
2 changes: 1 addition & 1 deletion docs/manual/zh/introduction/How-to-create-VR-content.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ <h2>工作流程</h2>
</p>

<code>
&lt;script src="/path/to/WebVR.js"&gt;&lt;/script&gt;
import { WEBVR } from 'three/examples/jsm/vr/WebVR.js';
</code>

<p>*WEBVR.createButton()*做了两件重要的事情:首先,它创建了一个按钮,指示了VR的兼容性;
Expand Down
10 changes: 1 addition & 9 deletions editor/js/Menubar.View.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,7 @@ Menubar.View = function ( editor ) {
option.setTextContent( 'VR mode' );
option.onClick( function () {

if ( WEBVR.isAvailable() === true ) {

editor.signals.enterVR.dispatch();

} else {

alert( 'WebVR not available' );

}
editor.signals.enterVR.dispatch();

} );
options.add( option );
Expand Down
2 changes: 1 addition & 1 deletion editor/js/libs/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ var APP = {

if ( renderer.vr.enabled ) {

dom.appendChild( WEBVR.createButton( renderer ) );
dom.appendChild( THREE.WEBVR.createButton( renderer ) );

}

Expand Down
34 changes: 26 additions & 8 deletions examples/js/vr/WebVR.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* Based on @tojiro's vr-samples-utils.js
*/

var WEBVR = {
THREE.WEBVR = {

createButton: function ( renderer, options ) {

Expand All @@ -25,8 +25,17 @@ var WEBVR = {

button.textContent = 'ENTER VR';

button.onmouseenter = function () { button.style.opacity = '1.0'; };
button.onmouseleave = function () { button.style.opacity = '0.5'; };
button.onmouseenter = function () {

button.style.opacity = '1.0';

};

button.onmouseleave = function () {

button.style.opacity = '0.5';

};

button.onclick = function () {

Expand All @@ -38,7 +47,7 @@ var WEBVR = {

}

function showEnterXR( device ) {
function showEnterXR( /*device*/ ) {

var currentSession = null;

Expand All @@ -53,7 +62,7 @@ var WEBVR = {

}

function onSessionEnded( event ) {
function onSessionEnded( /*event*/ ) {

currentSession.removeEventListener( 'end', onSessionEnded );

Expand All @@ -74,8 +83,17 @@ var WEBVR = {

button.textContent = 'ENTER XR';

button.onmouseenter = function () { button.style.opacity = '1.0'; };
button.onmouseleave = function () { button.style.opacity = '0.5'; };
button.onmouseenter = function () {

button.style.opacity = '1.0';

};

button.onmouseleave = function () {

button.style.opacity = '0.5';

};

button.onclick = function () {

Expand Down Expand Up @@ -167,7 +185,7 @@ var WEBVR = {

}, false );

window.addEventListener( 'vrdisplaydisconnect', function ( event ) {
window.addEventListener( 'vrdisplaydisconnect', function ( /*event*/ ) {

showVRNotFound();

Expand Down
11 changes: 11 additions & 0 deletions examples/jsm/vr/WebVR.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {
WebGLRenderer
} from '../../../src/Three';

export interface WEBVROptions {
referenceSpaceType: string;
}

export namespace WEBVR {
export function createButton(renderer: WebGLRenderer, options: WEBVROptions);
}
245 changes: 245 additions & 0 deletions examples/jsm/vr/WebVR.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
/**
* @author mrdoob / http://mrdoob.com
* @author Mugen87 / https://github.com/Mugen87
*
* Based on @tojiro's vr-samples-utils.js
*/



var WEBVR = {

createButton: function ( renderer, options ) {

if ( options && options.referenceSpaceType ) {

renderer.vr.setReferenceSpaceType( options.referenceSpaceType );

}

function showEnterVR( device ) {

button.style.display = '';

button.style.cursor = 'pointer';
button.style.left = 'calc(50% - 50px)';
button.style.width = '100px';

button.textContent = 'ENTER VR';

button.onmouseenter = function () {

button.style.opacity = '1.0';

};

button.onmouseleave = function () {

button.style.opacity = '0.5';

};

button.onclick = function () {

device.isPresenting ? device.exitPresent() : device.requestPresent( [ { source: renderer.domElement } ] );

};

renderer.vr.setDevice( device );

}

function showEnterXR( /*device*/ ) {

var currentSession = null;

function onSessionStarted( session ) {

session.addEventListener( 'end', onSessionEnded );

renderer.vr.setSession( session );
button.textContent = 'EXIT XR';

currentSession = session;

}

function onSessionEnded( /*event*/ ) {

currentSession.removeEventListener( 'end', onSessionEnded );

renderer.vr.setSession( null );
button.textContent = 'ENTER XR';

currentSession = null;

}

//

button.style.display = '';

button.style.cursor = 'pointer';
button.style.left = 'calc(50% - 50px)';
button.style.width = '100px';

button.textContent = 'ENTER XR';

button.onmouseenter = function () {

button.style.opacity = '1.0';

};

button.onmouseleave = function () {

button.style.opacity = '0.5';

};

button.onclick = function () {

if ( currentSession === null ) {

navigator.xr.requestSession( 'immersive-vr' ).then( onSessionStarted );

} else {

currentSession.end();

}

};

}

function disableButton() {

button.style.display = '';

button.style.cursor = 'auto';
button.style.left = 'calc(50% - 75px)';
button.style.width = '150px';

button.onmouseenter = null;
button.onmouseleave = null;

button.onclick = null;

}

function showVRNotFound() {

disableButton();

button.textContent = 'VR NOT FOUND';

renderer.vr.setDevice( null );

}

function showXRNotFound() {

disableButton();

button.textContent = 'XR NOT FOUND';

}

function stylizeElement( element ) {

element.style.position = 'absolute';
element.style.bottom = '20px';
element.style.padding = '12px 6px';
element.style.border = '1px solid #fff';
element.style.borderRadius = '4px';
element.style.background = 'rgba(0,0,0,0.1)';
element.style.color = '#fff';
element.style.font = 'normal 13px sans-serif';
element.style.textAlign = 'center';
element.style.opacity = '0.5';
element.style.outline = 'none';
element.style.zIndex = '999';

}

if ( 'xr' in navigator && 'supportsSession' in navigator.xr ) {

var button = document.createElement( 'button' );
button.style.display = 'none';

stylizeElement( button );

navigator.xr.supportsSession( 'immersive-vr' ).then( showEnterXR ).catch( showXRNotFound );

return button;

} else if ( 'getVRDisplays' in navigator ) {

var button = document.createElement( 'button' );
button.style.display = 'none';

stylizeElement( button );

window.addEventListener( 'vrdisplayconnect', function ( event ) {

showEnterVR( event.display );

}, false );

window.addEventListener( 'vrdisplaydisconnect', function ( /*event*/ ) {

showVRNotFound();

}, false );

window.addEventListener( 'vrdisplaypresentchange', function ( event ) {

button.textContent = event.display.isPresenting ? 'EXIT VR' : 'ENTER VR';

}, false );

window.addEventListener( 'vrdisplayactivate', function ( event ) {

event.display.requestPresent( [ { source: renderer.domElement } ] );

}, false );

navigator.getVRDisplays()
.then( function ( displays ) {

if ( displays.length > 0 ) {

showEnterVR( displays[ 0 ] );

} else {

showVRNotFound();

}

} ).catch( showVRNotFound );

return button;

} else {

var message = document.createElement( 'a' );
message.href = 'https://webvr.info';
message.innerHTML = 'WEBVR NOT SUPPORTED';

message.style.left = 'calc(50% - 90px)';
message.style.width = '180px';
message.style.textDecoration = 'none';

stylizeElement( message );

return message;

}

}

};

export { WEBVR };
2 changes: 1 addition & 1 deletion examples/webvr_ballshooter.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
</div>

<script src="js/vr/HelioWebXRPolyfill.js"></script>
<script src="js/vr/WebVR.js"></script>

<script type="module">

import * as THREE from '../build/three.module.js';

import { BoxLineGeometry } from './jsm/geometries/BoxLineGeometry.js';
import { WEBVR } from './jsm/vr/WebVR.js';

var camera, scene, renderer;
var controller1, controller2;
Expand Down
Loading

0 comments on commit 74fdf54

Please sign in to comment.