Guest User

Untitled

a guest
May 9th, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  1. //root = document.getElementById("WebGL");
  2. //response is reading the data from my local setup server through HTTP POST request
  3. //the above declarations are commented just for understanding
  4.  
  5. function createsphere(response, root, width, height) {
  6.  
  7. var scene, sphere, radius;
  8. var webglviewport;
  9. var spritearray = new Array();
  10. var renderer = new THREE.WebGLRenderer( {antialias:true} );
  11. var camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 1, 1000);
  12. var controls = new THREE.OrbitControls(camera, renderer.domElement);
  13.  
  14. function convertlatlonToVec3(lat, lon)
  15. {
  16. var cosLat = Math.cos(circle.getCenter().lat() * degrees);
  17. var sinLat = Math.sin(circle.getCenter().lat() * degrees);
  18.  
  19. var xSphere = radiusEquator * cosLat;
  20. var ySphere = 0;
  21. var zSphere = radiusPoles * sinLat;
  22. var rSphere = Math.sqrt(xSphere*xSphere + ySphere*ySphere + zSphere*zSphere);
  23.  
  24. var tmp = rSphere * Math.cos(lat * degrees);
  25.  
  26. xSphere = tmp * Math.cos((lon - circle.getCenter().lng()) * degrees);
  27. ySphere = tmp * Math.sin((lon - circle.getCenter().lng()) * degrees);
  28. zSphere = rSphere * Math.sin(lat * degrees);
  29.  
  30. var x = -ySphere/circle.getRadius();
  31. var y = (zSphere*cosLat - xSphere*sinLat)/circle.getRadius();
  32. var z = 0;
  33.  
  34. return new THREE.Vector3(x, y, z);
  35.  
  36. }
  37.  
  38. function labelBox(cardinal, radius, root)
  39. {
  40.  
  41. this.position = convertlatlonToVec3(cardinal.lat, cardinal.lon).multiplyScalar(radius);
  42.  
  43. //create html overlay box and clickable to url....
  44. this.box = document.createElement('div');
  45. a = document.createElement('div');
  46. a.innerHTML = cardinal.name;
  47. $(a).data("id", cardinal.ID);
  48. $(a).click(function(){
  49.  
  50. triggermarker = markers[parseInt($(this).data("id")) -1 ];
  51. google.maps.event.trigger(triggermarker, 'click');
  52. });
  53.  
  54. this.box.className = "spritelabel";
  55. this.box.appendChild(a);
  56.  
  57.  
  58. this.domElement = root;
  59. this.domElement.appendChild(this.box);
  60.  
  61. }
  62.  
  63. labelBox.prototype.update = function()
  64. {
  65.  
  66. var screenVector = new THREE.Vector3(0, 0, 0);
  67. screenVector.copy(this.position);
  68. screenVector.project(camera);
  69.  
  70. var posx = Math.round((screenVector.x + 1)* this.domElement.offsetWidth/2 + webglviewport.left);
  71. var posy = Math.round((1 - screenVector.y)* this.domElement.offsetHeight/2);
  72.  
  73.  
  74. var boundingRect = this.box.getBoundingClientRect();
  75.  
  76. //update the box overlays position
  77. this.box.style.left = (posx - boundingRect.width) + 'px';
  78. this.box.style.top = posy + 'px';
  79.  
  80. this.occludeLabel(this.box, this.marker);
  81. };
  82.  
  83. labelBox.prototype.occludeLabel = function(sprite, marker)
  84. {
  85. var markerposition = marker.getWorldPosition();
  86. var eye = camera.position.clone().sub(markerposition);
  87. var dot = eye.clone().normalize().dot(markerposition.normalize());
  88.  
  89. var occluded = (dot > 0) ? true : false;
  90.  
  91. if(occluded) {
  92. sprite.style.visibility = "hidden";
  93. }
  94. else {
  95. sprite.style.visibility = "visible";
  96. }
  97.  
  98. };
  99.  
  100.  
  101. function startwebgl(response, root) {
  102.  
  103. var width = $(root).width();
  104. var height = $(root).height();
  105.  
  106. webglviewport = $(root).position(); //gives the top-left of my viewport
  107.  
  108. renderer.setSize(width, height);
  109.  
  110. var mapdata = document.createElement('div');
  111.  
  112. Locname = document.createElement('div');
  113. Locname.innerHTML = response.ImgLocation;
  114.  
  115. b = document.createElement('div');
  116. b.innerHTML = response.Latitude;
  117.  
  118. unit_Lat = document.createElement('div');
  119. unit_Lat.innerHTML = response.CardinalDir_Lat;
  120.  
  121. c = document.createElement('div');
  122. c.innerHTML = response.Longitude;
  123.  
  124. unit_Lng = document.createElement('div');
  125. unit_Lng.innerHTML = response.CardinalDir_Lng;
  126.  
  127. mapdata.className = "Webglbox";
  128. mapdata.appendChild(Locname);
  129. mapdata.appendChild(b);
  130. mapdata.appendChild(unit_Lat);
  131. mapdata.appendChild(c);
  132. mapdata.appendChild(unit_Lng);
  133.  
  134.  
  135. //document.body.appendchild();
  136. root.appendChild(renderer.domElement);
  137. root.appendChild(mapdata);
  138.  
  139. camera.position.z = 5;
  140.  
  141. scene = new THREE.Scene();
  142.  
  143. radius = 2.5;
  144.  
  145.  
  146. controls.minPolarAngle = response.Vertlimit_min; //Math.PI/3 ;
  147. controls.maxPolarAngle = response.Vertlimit_max; //2*Math.PI/3 ;
  148.  
  149.  
  150. var spheregeometry = new THREE.SphereGeometry(radius, 20, 20, 0, -6.283, 1, 1);
  151. var texture = THREE.ImageUtils.loadTexture(response.ImagePath);
  152. texture.minFilter = THREE.NearestFilter;
  153. var spherematerial = new THREE.MeshBasicMaterial({map: texture});
  154. sphere = new THREE.Mesh(spheregeometry, spherematerial);
  155.  
  156. scene.add(sphere);
  157. scene.add(camera);
  158.  
  159. $.ajax({
  160. type: "GET",
  161. url: "marker.php",
  162. dataType: "json",
  163. success: function(spriteResponse)
  164. {
  165.  
  166. for(var i=0; i<spriteResponse.length; i++)
  167. {
  168.  
  169. var cardinal = {ID: parseInt(spriteResponse[i].ID), lat: parseFloat(spriteResponse[i].lat),
  170. lon: parseFloat(spriteResponse[i].lng), name: spriteResponse[i].name};
  171.  
  172. var sprite = new labelBox(cardinal, radius, root);
  173. //sprite.update();
  174. spritearray.push(sprite);
  175. }
  176.  
  177. window.addEventListener('resize', onWindowResize(width, height), false);
  178. animate(spritearray);
  179.  
  180. function onWindowResize(width, height)
  181. {
  182.  
  183. camera.aspect = width/height;
  184. camera.updateProjectionMatrix();
  185. renderer.setSize(width, height);
  186. }
  187.  
  188.  
  189. function animate(spritearray) {
  190.  
  191. for(var j=0; j<spritearray.length; j++){
  192.  
  193. spritearray[j].update();
  194. }
  195. requestAnimationFrame(animate);
  196. controls.update();
  197.  
  198. renderer.render(scene, camera);
  199.  
  200. }
  201.  
  202. }
  203.  
  204. });
  205.  
  206. }
  207.  
  208.  
  209. startwebgl(response, root);
  210.  
  211. }
Add Comment
Please, Sign In to add comment