mars.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import {
  2. DebugTilesRenderer as TilesRenderer,
  3. } from '../src/index.js';
  4. import {
  5. Scene,
  6. DirectionalLight,
  7. AmbientLight,
  8. WebGLRenderer,
  9. PerspectiveCamera,
  10. Group,
  11. sRGBEncoding,
  12. FogExp2,
  13. } from 'three';
  14. import { FlyOrbitControls } from './FlyOrbitControls.js';
  15. import * as dat from 'three/examples/jsm/libs/dat.gui.module.js';
  16. let camera, controls, scene, renderer;
  17. let groundTiles, skyTiles;
  18. const params = {
  19. errorTarget: 12,
  20. displayBoxBounds: false,
  21. fog: false,
  22. };
  23. init();
  24. render();
  25. function init() {
  26. const fog = new FogExp2( 0xd8cec0, .0075, 250 );
  27. scene = new Scene();
  28. // primary camera view
  29. renderer = new WebGLRenderer( { antialias: true } );
  30. renderer.setPixelRatio( window.devicePixelRatio );
  31. renderer.setSize( window.innerWidth, window.innerHeight );
  32. renderer.setClearColor( 0xd8cec0 );
  33. renderer.outputEncoding = sRGBEncoding;
  34. document.body.appendChild( renderer.domElement );
  35. renderer.domElement.tabIndex = 1;
  36. camera = new PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 4000 );
  37. camera.position.set( 20, 10, 20 );
  38. // controls
  39. controls = new FlyOrbitControls( camera, renderer.domElement );
  40. controls.screenSpacePanning = false;
  41. controls.minDistance = 1;
  42. controls.maxDistance = 2000;
  43. controls.maxPolarAngle = Math.PI / 2;
  44. controls.baseSpeed = 0.1;
  45. controls.fastSpeed = 0.2;
  46. // lights
  47. const dirLight = new DirectionalLight( 0xffffff );
  48. dirLight.position.set( 1, 2, 3 );
  49. scene.add( dirLight );
  50. const ambLight = new AmbientLight( 0xffffff, 0.2 );
  51. scene.add( ambLight );
  52. const tilesParent = new Group();
  53. tilesParent.rotation.set( Math.PI / 2, 0, 0 );
  54. scene.add( tilesParent );
  55. groundTiles = new TilesRenderer( 'https://raw.githubusercontent.com/NASA-AMMOS/3DTilesSampleData/master/msl-dingo-gap/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_colorize_tileset.json' );
  56. groundTiles.fetchOptions.mode = 'cors';
  57. groundTiles.lruCache.minSize = 900;
  58. groundTiles.lruCache.maxSize = 1300;
  59. groundTiles.errorTarget = 12;
  60. skyTiles = new TilesRenderer( 'https://raw.githubusercontent.com/NASA-AMMOS/3DTilesSampleData/master/msl-dingo-gap/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_sky/0528_0260184_to_s64o256_sky_tileset.json' );
  61. skyTiles.fetchOptions.mode = 'cors';
  62. skyTiles.lruCache = groundTiles.lruCache;
  63. tilesParent.add( groundTiles.group, skyTiles.group );
  64. onWindowResize();
  65. window.addEventListener( 'resize', onWindowResize, false );
  66. const gui = new dat.GUI();
  67. gui.add( params, 'fog' ).onChange( v => {
  68. scene.fog = v ? fog : null;
  69. } );
  70. gui.add( params, 'displayBoxBounds' );
  71. gui.add( params, 'errorTarget', 0, 100 );
  72. gui.open();
  73. }
  74. function onWindowResize() {
  75. camera.aspect = window.innerWidth / window.innerHeight;
  76. camera.updateProjectionMatrix();
  77. renderer.setSize( window.innerWidth, window.innerHeight );
  78. renderer.setPixelRatio( window.devicePixelRatio );
  79. }
  80. function render() {
  81. requestAnimationFrame( render );
  82. camera.updateMatrixWorld();
  83. groundTiles.errorTarget = params.errorTarget;
  84. groundTiles.displayBoxBounds = params.displayBoxBounds;
  85. skyTiles.displayBoxBounds = params.displayBoxBounds;
  86. groundTiles.setCamera( camera );
  87. groundTiles.setResolutionFromRenderer( camera, renderer );
  88. groundTiles.update();
  89. skyTiles.setCamera( camera );
  90. skyTiles.setResolutionFromRenderer( camera, renderer );
  91. skyTiles.update();
  92. renderer.render( scene, camera );
  93. }