Guest User

Untitled

a guest
Dec 16th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.70 KB | None | 0 0
  1. var manualControl = false;
  2. var longitude = 0;
  3. var latitude = 0;
  4. var savedX;
  5. var savedY;
  6. var savedLongitude;
  7. var savedLatitude;
  8. // Boolean for start and restart
  9. var initAnim = true;
  10. var runAnim = false;
  11. var isPlay = false;
  12. var theta = 0;
  13. // Buttons startButton and resetButton
  14. var startButton = document.getElementById( 'startButtonId' );
  15.  
  16. // panoramas background
  17. var panoramasArray = ["01.jpg","02.jpg","03.jpg","04.jpg","05.jpg","06.jpg"];
  18. var panoramaNumber = Math.floor(Math.random()*panoramasArray.length);
  19. // domElement click Start Button
  20. startButton.onclick = function StartAnimation() {
  21. if (initAnim) {
  22.  
  23. initAnim = false;
  24. runAnim = true;
  25. longitude = 0;
  26. }
  27. // Start and Pause
  28. if(runAnim){
  29. startButton.innerHTML = 'Pause';
  30. runAnim = false;
  31. isPlay = true;
  32. animate();
  33. } else {
  34. startButton.innerHTML = 'Restart';
  35. runAnim = true;
  36. isPlay = false;
  37. }
  38. }
  39. // setting up the renderer
  40. renderer = new THREE.WebGLRenderer();
  41. renderer.setSize(window.innerWidth, window.innerHeight);
  42. document.body.appendChild(renderer.domElement);
  43. // creating a new scene
  44. var scene = new THREE.Scene();
  45. var scene2 = new THREE.Scene();
  46. // adding a camera
  47. var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
  48. camera.target = new THREE.Vector3(0, 0, 0);
  49. // creation of a big sphere geometry
  50. var sphere = new THREE.SphereGeometry(100, 100, 40);
  51. sphere.applyMatrix(new THREE.Matrix4().makeScale(-1, 1, 1));
  52. // creation of the sphere material
  53. var sphereMaterial = new THREE.MeshBasicMaterial();
  54. sphereMaterial.map = THREE.ImageUtils.loadTexture(panoramasArray[panoramaNumber])
  55. //sphereMaterial.map = THREE.ImageUtils.loadTexture("06.jpg")
  56. // geometry + material = mesh (actual object)
  57. var sphereMesh = new THREE.Mesh(sphere, sphereMaterial);
  58. scene.add(sphereMesh);
  59. // listeners
  60. document.addEventListener("mousedown", onDocumentMouseDown, false);
  61. document.addEventListener("mousemove", onDocumentMouseMove, false);
  62. document.addEventListener("mouseup", onDocumentMouseUp, false);
  63. //render();
  64. function render(){
  65. //requestAnimationFrame(render);
  66. if(!manualControl){
  67. longitude += 0.1;
  68. }
  69. // limiting latitude from -85 to 85 (cannot point to the sky or under your feet)
  70. latitude = Math.max(-85, Math.min(85, latitude));
  71. // moving the camera according to current latitude (vertical movement) and longitude (horizontal movement)
  72. camera.target.x = 100 * Math.sin(THREE.Math.degToRad(90 - latitude)) * Math.cos(THREE.Math.degToRad(longitude));
  73. camera.target.y = 100 * Math.cos(THREE.Math.degToRad(90 - latitude));
  74. camera.target.z = 100 * Math.sin(THREE.Math.degToRad(90 - latitude)) * Math.sin(THREE.Math.degToRad(longitude));
  75. camera.lookAt(camera.target);
  76. // calling again render function
  77. renderer.render(scene, camera);
  78. }
  79.  
  80. // This function runs when start button is pressed//
  81. function animate() {
  82. if (!isPlay) return;
  83. requestAnimationFrame(animate);
  84. theta += 0.01;
  85. render();
  86. }
  87.  
  88. // when the mouse is pressed, we switch to manual control and save current coordinates
  89. function onDocumentMouseDown(event){
  90. event.preventDefault();
  91. manualControl = true;
  92. savedX = event.clientX;
  93. savedY = event.clientY;
  94. savedLongitude = longitude;
  95. savedLatitude = latitude;
  96. }
  97.  
  98. // when the mouse moves, if in manual contro we adjust coordinates
  99. function onDocumentMouseMove(event){
  100.  
  101. if(manualControl){
  102. longitude = (savedX - event.clientX) * 0.1 + savedLongitude;
  103. latitude = (event.clientY - savedY) * 0.1 + savedLatitude;
  104. }
  105.  
  106. }
  107. // This function handles the mouse wheel event in browsers///
  108. function onMouseWheel(event) {
  109. event.preventDefault();
  110. if (event.wheelDeltaY) { // WebKit
  111. camera.fov -= event.wheelDeltaY * 0.05;
  112. } else if (event.wheelDelta) { // Opera / IE9
  113. camera.fov -= event.wheelDelta * 0.05;
  114. } else if (event.detail) { // Firefox
  115. camera.fov += event.detail * 1.0;
  116. }
  117. camera.fov = Math.max(40, Math.min(100, camera.fov));
  118. camera.updateProjectionMatrix();
  119. }
  120.  
  121. document.addEventListener('mousewheel', onMouseWheel, false);
  122. document.addEventListener('DOMMouseScroll', onMouseWheel, false);
  123. // when the mouse is released, we turn manual control off
  124. function onDocumentMouseUp(event){
  125. manualControl = false;
  126. }
  127. // pressing a key (actually releasing it) changes the texture map
  128. document.onkeyup = function(event){
  129. panoramaNumber = (panoramaNumber + 1) % panoramasArray.length
  130. sphereMaterial.map = THREE.ImageUtils.loadTexture(panoramasArray[panoramaNumber])
  131.  
  132. }
Add Comment
Please, Sign In to add comment