class Cenario extends AncestralComum {

	antesCriar() {
	   super.antesCriar();
	   this.cpx = this.dados.cpx,
	   this.cpy = this.dados.cpy,
	   this.cpz = this.dados.cpz
	}

	duranteCriar() {
	   super.duranteCriar();
	   this.criarCena();
	   this.criarCamera();
	   this.criarLuzes();
	   this.criarControle();
	 }

	criarCena () {
	   this.cena = new THREE.Scene();
	}

	criarCamera () {
	   this.camera = new THREE.PerspectiveCamera(30,window.innerWidth / window.innerHeight,1,50000);
	   this.camera.aspect = window.innerWidth / window.innerHeight;
	   this.camera.updateProjectionMatrix();
	   this.camera.position.set(this.cpx,this.cpy,this.cpz);
	}

	criarLuzes () {
	}

	criarControle () {
	}

	criarGeometriaCone(raioAcima,raioAbaixo,altura,segLarg,segAlt,Fechar,IniTheta,FimTheta) {
	   return new THREE.CylinderGeometry/*BufferGeometry*/(raioAcima,raioAbaixo,altura,segLarg,segAlt,Fechar,IniTheta,FimTheta);
	}

	criarGeometriaEsfera(raio,segLarg,segAlt,IniPhi,FimPhi,IniTheta,FimTheta,solicitante) {
	   return new THREE.SphereGeometry/*BufferGeometry*/(raio,segLarg,segAlt,IniPhi,FimPhi,IniTheta,FimTheta);
	}

	criarGeometriaTorus(raio,tubo,segRad,segTub,arco,solicitante) {
	   return new THREE.TorusGeometry(raio,tubo,segRad,segTub,arco);	
	}

	criarEsferaRaio(raio) {
	   this.esferaRaio = undefined;
	   return this.esferaRaio;
	}

	criarMalha(geometria,materia) {
	   return new THREE.Mesh(geometria,material);
	}

	criarGeometriaPontos(geometria,cor) {
		var vertices = geometria.vertices;
		var numVertices = vertices.length;
		var posicoes = new Float32Array(numVertices*3);
		var cores = new Float32Array(numVertices*3);
		//var cor = new THREE.Color(0x00ff00);
		//var cor = solicitante.material[0].color;
		vertices.forEach(function(vertice,i) {
			var x = vertice.x;
			var y = vertice.y;
			var z = vertice.z;
			posicoes[i*3] = x;
			posicoes[i*3+1] = y;
			posicoes[i*3+2] = z;
			// var intensity = ( y + 0.1 ) * 5;
			var intensity = 1;
			cores[i*3] = cor.r * intensity;
			cores[i*3+1] = cor.g * intensity;
			cores[i*3+2] = cor.b * intensity;
		});
		/*
		for (var i = 0; i < numVertices; i++) {
			vertice = vertices[i];
			var x = vertice.x;
			var y = vertice.y;
			var z = vertice.z;
			posicoes[i*3] = x;
			posicoes[i*3+1] = y;
			posicoes[i*3+2] = z;
			// var intensity = ( y + 0.1 ) * 5;
			var intensity = 1;
			cores[i*3] = cor.r * intensity;
			cores[i*3+1] = cor.g * intensity;
			cores[i*3+2] = cor.b * intensity;
		}
		*/
		var geometriaVertices = new THREE.BufferGeometry();
		geometriaVertices.addAttribute("position", new THREE.BufferAttribute(posicoes,3));
		geometriaVertices.addAttribute("color", new THREE.BufferAttribute(cores,3));
		geometriaVertices.computeBoundingBox();
		geometria.dispose();
		geometria = undefined;
		return geometriaVertices;
	}
}