function _convertLatLonToVec3(lat, lon) {
lat = lat * Math.PI / 180.0;
lon = -lon * Math.PI / 180.0;
return new THREE.Vector3(
Math.cos(lat) * Math.cos(lon),
Math.cos(lat) * Math.sin(lon));
function Earth(radius, texture) {
THREE.Object3D.call(this);
this.userData.radius = radius;
var earth = new THREE.Mesh(
new THREE.SphereBufferGeometry(radius, 64.0, 48.0),
new THREE.MeshPhongMaterial({
Earth.prototype = Object.create(THREE.Object3D.prototype);
var scene, camera, renderer, label;
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(45, 4 / 3, 0.1, 100);
camera.position.set(0.0, 1.5, 3.0);
renderer = new THREE.WebGLRenderer({
controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.autoRotate = true;
controls.autoRotateSpeed = .5;
controls.enablePan = false;
var ambient = new THREE.AmbientLight(0xffffff, 0.5);
var direcitonal = new THREE.DirectionalLight(0xffffff, 0.5);
direcitonal.position.set(5.0, 2.0, 5.0).normalize();
var manager = createLoader(renderer.domElement, animate);
var texLoader = new THREE.TextureLoader(manager).setCrossOrigin(true);
var texture = texLoader.load('https://s3-eu-west-2.amazonaws.com/bckld/lab/textures/earth_latlon.jpg');
texture.anisotropy = renderer.capabilities.getMaxAnisotropy();
var earth = new Earth(1.0, texture);
var sphere1 = new THREE.Mesh(new THREE.SphereGeometry(radius1, 16, 16));
window.onmousedown = function( event )
const rect = renderer.domElement.getBoundingClientRect();
const left = event.clientX - rect.left;
const top = event.clientY - rect.top;
const x = (left / rect.width) * 2 - 1;
const y = - (top / rect.height) * 2 + 1;
const raycaster = new THREE.Raycaster();
raycaster.ray.origin.setFromMatrixPosition(camera.matrixWorld);
raycaster.ray.direction.set(x, y, 0.5).unproject(camera).sub(raycaster.ray.origin).normalize();
const intersects = raycaster.intersectObjects(markerarry, true);
window.addEventListener('resize', onResize);
document.body.appendChild(renderer.domElement);
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
requestAnimationFrame(animate);
renderer.render(scene, camera);