@@ -6,10 +6,7 @@ import 'vtk.js/Sources/Rendering/Profiles/Geometry';
66import HttpDataAccessHelper from 'vtk.js/Sources/IO/Core/DataAccessHelper/HttpDataAccessHelper' ;
77import macro from 'vtk.js/Sources/macros' ;
88import vtkDeviceOrientationToCamera from 'vtk.js/Sources/Interaction/Misc/DeviceOrientationToCamera' ;
9- import vtkForwardPass from 'vtk.js/Sources/Rendering/OpenGL/ForwardPass' ;
109import vtkFullScreenRenderWindow from 'vtk.js/Sources/Rendering/Misc/FullScreenRenderWindow' ;
11- import vtkRadialDistortionPass from 'vtk.js/Sources/Rendering/OpenGL/RadialDistortionPass' ;
12- import vtkRenderer from 'vtk.js/Sources/Rendering/Core/Renderer' ;
1310import vtkSkybox from 'vtk.js/Sources/Rendering/Core/Skybox' ;
1411import vtkSkyboxReader from 'vtk.js/Sources/IO/Misc/SkyboxReader' ;
1512import vtkURLExtract from 'vtk.js/Sources/Common/Core/URLExtract' ;
@@ -41,14 +38,9 @@ let autoInit = true;
4138const cameraFocalPoint = userParams . direction || [ 0 , 0 , - 1 ] ;
4239const cameraViewUp = userParams . up || [ 0 , 1 , 0 ] ;
4340const cameraViewAngle = userParams . viewAngle || 100 ;
44- const enableVR = ! ! userParams . vr ;
4541const eyeSpacing = userParams . eye || 0.0 ;
4642const grid = userParams . debug || false ;
4743const autoIncrementTimer = userParams . timer || 0 ;
48- const disableTouchNext = userParams . disableTouch || false ;
49- const distk1 = userParams . k1 || 0.2 ;
50- const distk2 = userParams . k2 || 0.0 ;
51- const cameraCenterY = userParams . centerY || 0.0 ;
5244
5345const body = document . querySelector ( 'body' ) ;
5446let fullScreenMetod = null ;
@@ -151,10 +143,8 @@ function createVisualization(container, mapReader) {
151143 const mainRenderer = fullScreenRenderer . getRenderer ( ) ;
152144 const interactor = fullScreenRenderer . getInteractor ( ) ;
153145 const actor = vtkSkybox . newInstance ( ) ;
154- let camera = mainRenderer . getActiveCamera ( ) ;
155- let leftRenderer = null ;
156- let rightRenderer = null ;
157- let updateCameraCallBack = mainRenderer . resetCameraClippingRange ;
146+ const camera = mainRenderer . getActiveCamera ( ) ;
147+ const updateCameraCallBack = mainRenderer . resetCameraClippingRange ;
158148
159149 // Connect viz pipeline
160150 actor . addTexture ( mapReader . getOutputData ( ) ) ;
@@ -189,116 +179,28 @@ function createVisualization(container, mapReader) {
189179 updateSkybox ( allPositions [ nextIdx ] ) ;
190180 }
191181
192- if ( enableVR && vtkDeviceOrientationToCamera . isDeviceOrientationSupported ( ) ) {
193- // vtkMobileVR.getVRHeadset().then((headset) => {
194- // console.log('got headset');
195- // console.log(headset);
196- // console.log(vtkMobileVR.hardware);
197- // });
198-
199- leftRenderer = vtkRenderer . newInstance ( ) ;
200- rightRenderer = vtkRenderer . newInstance ( ) ;
201-
202- // Configure left/right renderers
203- leftRenderer . setViewport ( 0 , 0 , 0.5 , 1 ) ;
204- leftRenderer . addActor ( actor ) ;
205- const leftCamera = leftRenderer . getActiveCamera ( ) ;
206- leftCamera . set ( cameraConfiguration ) ;
207- leftCamera . setWindowCenter ( - eyeSpacing , - cameraCenterY ) ;
208-
209- rightRenderer . setViewport ( 0.5 , 0 , 1 , 1 ) ;
210- rightRenderer . addActor ( actor ) ;
211- const rightCamera = rightRenderer . getActiveCamera ( ) ;
212- rightCamera . set ( cameraConfiguration ) ;
213- rightCamera . setWindowCenter ( eyeSpacing , - cameraCenterY ) ;
214-
215- // Provide custom update callback + fake camera
216- updateCameraCallBack = ( ) => {
217- leftRenderer . resetCameraClippingRange ( ) ;
218- rightRenderer . resetCameraClippingRange ( ) ;
219- } ;
220- camera = {
221- setDeviceAngles ( alpha , beta , gamma , screen ) {
222- leftCamera . setDeviceAngles ( alpha , beta , gamma , screen ) ;
223- rightCamera . setDeviceAngles ( alpha , beta , gamma , screen ) ;
224- } ,
225- } ;
226-
227- // Reconfigure render window
228- renderWindow . addRenderer ( leftRenderer ) ;
229- renderWindow . addRenderer ( rightRenderer ) ;
230- renderWindow . removeRenderer ( mainRenderer ) ;
231-
232- const distPass = vtkRadialDistortionPass . newInstance ( ) ;
233- distPass . setK1 ( distk1 ) ;
234- distPass . setK2 ( distk2 ) ;
235- distPass . setCameraCenterY ( cameraCenterY ) ;
236- distPass . setCameraCenterX1 ( - eyeSpacing ) ;
237- distPass . setCameraCenterX2 ( eyeSpacing ) ;
238- distPass . setDelegates ( [ vtkForwardPass . newInstance ( ) ] ) ;
239- fullScreenRenderer . getAPISpecificRenderWindow ( ) . setRenderPasses ( [ distPass ] ) ;
240-
241- // Hide any controller
242- fullScreenRenderer . setControllerVisibility ( false ) ;
243-
244- // Remove window interactions
245- interactor . unbindEvents ( ) ;
246-
247- // Attach touch control
248- if ( ! disableTouchNext ) {
249- fullScreenRenderer
250- . getRootContainer ( )
251- . addEventListener ( 'touchstart' , nextPosition , true ) ;
252- if ( fullScreenMetod ) {
253- fullScreenRenderer . getRootContainer ( ) . addEventListener (
254- 'touchend' ,
255- ( e ) => {
256- body [ fullScreenMetod ] ( ) ;
257- } ,
258- true
259- ) ;
260- }
261- }
262-
263- // Warning if browser does not support fullscreen
264- /* eslint-disable */
265- if ( navigator . userAgent . match ( 'CriOS' ) ) {
266- alert (
267- 'Chrome on iOS does not support fullscreen. Please use Safari instead.'
268- ) ;
269- }
270- if ( navigator . userAgent . match ( 'FxiOS' ) ) {
271- alert (
272- 'Firefox on iOS does not support fullscreen. Please use Safari instead.'
273- ) ;
274- }
275- /* eslint-enable */
276- } else {
277- camera . set ( cameraConfiguration ) ;
278- mainRenderer . addActor ( actor ) ;
279-
280- // add vr option button if supported
281- fullScreenRenderer . getApiSpecificRenderWindow ( ) . onHaveVRDisplay ( ( ) => {
282- if (
283- fullScreenRenderer . getApiSpecificRenderWindow ( ) . getVrDisplay ( )
284- . capabilities . canPresent
285- ) {
286- const button = document . createElement ( 'button' ) ;
287- button . style . position = 'absolute' ;
288- button . style . left = '10px' ;
289- button . style . bottom = '10px' ;
290- button . style . zIndex = 10000 ;
182+ camera . set ( cameraConfiguration ) ;
183+ mainRenderer . addActor ( actor ) ;
184+
185+ // add vr option button if supported
186+ if (
187+ navigator . xr !== undefined &&
188+ navigator . xr . isSessionSupported ( 'immersive-vr' )
189+ ) {
190+ const button = document . createElement ( 'button' ) ;
191+ button . style . position = 'absolute' ;
192+ button . style . left = '10px' ;
193+ button . style . bottom = '10px' ;
194+ button . style . zIndex = 10000 ;
195+ button . textContent = 'Send To VR' ;
196+ document . querySelector ( 'body' ) . appendChild ( button ) ;
197+ button . addEventListener ( 'click' , ( ) => {
198+ if ( button . textContent === 'Send To VR' ) {
199+ fullScreenRenderer . getApiSpecificRenderWindow ( ) . startXR ( ) ;
200+ button . textContent = 'Return From VR' ;
201+ } else {
202+ fullScreenRenderer . getApiSpecificRenderWindow ( ) . stopXR ( ) ;
291203 button . textContent = 'Send To VR' ;
292- document . querySelector ( 'body' ) . appendChild ( button ) ;
293- button . addEventListener ( 'click' , ( ) => {
294- if ( button . textContent === 'Send To VR' ) {
295- fullScreenRenderer . getApiSpecificRenderWindow ( ) . startVR ( ) ;
296- button . textContent = 'Return From VR' ;
297- } else {
298- fullScreenRenderer . getApiSpecificRenderWindow ( ) . stopVR ( ) ;
299- button . textContent = 'Send To VR' ;
300- }
301- } ) ;
302204 }
303205 } ) ;
304206 }
0 commit comments