Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Map(selector)
- {
- this.stats = new Stats();
- // Align top-left
- this.stats.domElement.style.position = 'fixed';
- this.stats.domElement.style.left = '0';
- this.stats.domElement.style.top = '0';
- this.stats.domElement.style.zIndex = '10000';
- document.body.appendChild( this.stats.domElement );
- this.container = $(selector);
- this.container.width(this.container.parent().width());
- this.container.height(this.container.parent().parent().height() - 61);
- this.windowHalfX = this.container.width() / 2;
- this.windowHalfY = this.container.height() / 2;
- this.mouseX = this.windowHalfX;
- this.mouseY = this.windowHalfY;
- this.generateScene();
- this.generatePlane();
- this.generateBuildings();
- this.generateLights();
- this.addToDOM();
- this.animate();
- var t = this;
- this.container.click(function(e)
- {
- //t.click(e);
- });
- this.container.mousemove(function(e)
- {
- t.mouseMove(e);
- });
- this.container.mousedown(function(e)
- {
- t.mouseDown(e);
- });
- this.container.mouseup(function(e)
- {
- t.mouseUp(e);
- });
- }
- Map.prototype.generateScene = function()
- {
- this.projector = new THREE.Projector();
- this.scene = new THREE.Scene();
- this.scene2 = new THREE.Scene();
- this.camera = new THREE.PerspectiveCamera(75, this.container.innerWidth() / this.container.innerHeight(), 1, 10000);
- this.camera.position.x = -500;
- this.camera.position.y = 100;
- this.camera.position.z = 300;
- this.camera.lookAt({x: -300, y: 0, z: 0});
- this.scene2.add(this.camera);
- }
- Map.prototype.generatePlane = function()
- {
- var img = new THREE.MeshBasicMaterial({
- color: 0xCCCCCC,
- map: THREE.ImageUtils.loadTexture('images/map.jpg'),
- overdraw: true
- });
- img.map.needsUpdate = true;
- this.plane = new THREE.Mesh(new THREE.PlaneGeometry(2048, 2048, 16, 16), img);
- this.scene.add(this.plane);
- }
- Map.prototype.generateBuildings = function()
- {
- //this._addCube(10, 10, 10, 0, 0, 0);
- }
- Map.prototype._addCube = function(w, h, d, x, y, z)
- {
- var geometry = new THREE.CubeGeometry(w, h, d);
- var material = new THREE.MeshLambertMaterial({
- color: 0xffffff,
- shading: THREE.FlatShading,
- overdraw: true
- });
- var cube = new THREE.Mesh(geometry, material);
- cube.position.x = x;
- cube.position.y = y + (h / 2);
- cube.position.z = z;
- this.scene2.add(cube);
- }
- Map.prototype.generateLights = function()
- {
- var ambientLight = new THREE.AmbientLight(Math.random() * 0x10);
- this.scene2.add(ambientLight);
- var directionalLight = new THREE.DirectionalLight(Math.random() * 0xffffff);
- directionalLight.position.x = Math.random() - 0.5;
- directionalLight.position.y = Math.random() - 0.5;
- directionalLight.position.z = Math.random() - 0.5;
- directionalLight.position.normalize();
- this.scene2.add(directionalLight);
- var directionalLight = new THREE.DirectionalLight(Math.random() * 0xffffff);
- directionalLight.position.x = Math.random() - 0.5;
- directionalLight.position.y = Math.random() - 0.5;
- directionalLight.position.z = Math.random() - 0.5;
- directionalLight.position.normalize();
- this.scene2.add(directionalLight);
- }
- Map.prototype.addToDOM = function(selector)
- {
- //this.renderer = new THREE.WebGLRenderer();
- this.renderer = new THREE.CanvasRenderer();
- this.renderer.setSize(this.container.innerWidth(), this.container.innerHeight());
- this.renderer.autoClear = false;
- this.container.append(this.renderer.domElement);
- }
- Map.prototype.getMousePosition = function(event)
- {
- var parentOffset = this.container.offset();
- var clickX = event.pageX - parentOffset.left;
- var clickY = event.pageY - parentOffset.top;
- var vector = new THREE.Vector3((clickX / this.container.innerWidth()) * 2 - 1, - (clickY / this.container.innerHeight()) * 2 + 1, 1);
- this.projector.unprojectVector(vector, this.camera);
- var ray = new THREE.Ray(this.camera.position, vector.subSelf(this.camera.position).normalize());
- var intersect = ray.intersectObject(this.plane);
- return intersect[0].point;
- }
- Map.prototype.mouseDown = function(event)
- {
- this.mouseStartPosition = this.getMousePosition(event);
- }
- Map.prototype.mouseUp = function(event)
- {
- var pos = this.getMousePosition(event);
- var width = Math.abs(this.mouseStartPosition.x - pos.x);
- var depth = Math.abs(this.mouseStartPosition.z - pos.z);
- var middleX = (pos.x + this.mouseStartPosition.x) / 2;
- var middleZ = (pos.z + this.mouseStartPosition.z) / 2;
- this._addCube(width, 10, depth, middleX, 0, middleZ);
- }
- Map.prototype.mouseMove = function(event)
- {
- var parentOffset = this.container.offset();
- var clickX = event.pageX - parentOffset.left;
- var clickY = event.pageY - parentOffset.top;
- this.mouseX = clickX - this.windowHalfX;
- this.mouseY = clickY - this.windowHalfY;
- }
- Map.prototype.animate = function()
- {
- this.stats.begin();
- this.render();
- this.stats.end();
- }
- Map.prototype.render = function()
- {
- this.camera.position.x += (this.mouseX - this.camera.position.x) * 0.05;
- this.camera.position.y += ((-this.mouseY - this.camera.position.y) * 0.05);
- this.camera.lookAt(this.scene.position);
- this.renderer.clear();
- this.renderer.render(this.scene, this.camera);
- this.renderer.render(this.scene2, this.camera);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement