Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.08.2016, 10:56
Новичок на форуме
Отправить личное сообщение для Catastrofa Посмотреть профиль Найти все сообщения от Catastrofa
 
Регистрация: 28.08.2016
Сообщений: 1

Нет тени на самодельном объекте
Добрый день! Рассчитываю на помощь тех кто знаком с THREE.js.
Суть проблемы следующая есть сцена на ней два объекта, один стандартный примитив куб, другой объект созданный по координатам вершин. На примитиве есть тени на самодельном их нет. В чем может быть проблема? Понимаю что проблема может касаться материалов, но ничего из того что пробовала не помогло.
var container;
var controls, controlsnull;
var camera, scene, renderer;

var raycaster;
var mouse;
var my_material;

var key_mouse = true;

var objects = [];

var glob_h = 700;

init();
animate();

function init() {
	container = document.getElementById("model_3d");

	camera = new THREE.PerspectiveCamera( 70, $(container).innerWidth() / glob_h, 1, 10000 );
	camera.position.set( 0, 300, 500 );

	scene = new THREE.Scene();

	var vertices = [
		new THREE.Vector3(15,15,15),
		new THREE.Vector3(10,10,-10),
		new THREE.Vector3(10,-10,10),
		new THREE.Vector3(10,-10,-10),
		new THREE.Vector3(-10,10,-10),
		new THREE.Vector3(-10,10,10),
		new THREE.Vector3(-10,-10,-10),
		new THREE.Vector3(-10,-10,10)
		];
		
	var faces = [
		new THREE.Face3(0,2,1),
		new THREE.Face3(2,3,1),
		new THREE.Face3(4,6,5),
		new THREE.Face3(6,7,5),
		new THREE.Face3(4,5,1),
		new THREE.Face3(5,0,1),
		new THREE.Face3(7,6,2),
		new THREE.Face3(6,3,2),
		new THREE.Face3(5,7,0),
		new THREE.Face3(7,2,0),
		new THREE.Face3(1,3,4),
		new THREE.Face3(3,6,4),
		];
	var geom = new THREE.Geometry();
	geom.vertices = vertices;
	geom.faces = faces;
	//geom.computeCentroids();
	geom.mergeVertices();				
				
		var geom2 = new THREE.BoxGeometry( 20, 20, 20 );
		
		for ( var i = 0; i < 2; i++ ) {
//			my_material = new THREE.MeshBasicMaterial( { color: '#d5d5d5', opacity: 1 } );
//			my_material = new THREE.LineBasicMaterial( { color: '#000000', opacity: 1 } );
//			my_material = new THREE.MeshBasicMaterial( { color: 0xff00ff, wireframe: true, side: THREE.DoubleSide, overdraw: 1 } );
//			my_material = new THREE.MeshBasicMaterial( { color: 0xff0000, blending: THREE.AdditiveBlending } );
			my_material = new THREE.MeshLambertMaterial( { opacity:1, color: 0xD85AFF, transparent: true, overdraw: 0.5 } );
//			my_material = new THREE.MeshLambertMaterial( { color: 0x00ffff, wireframe: true, overdraw: 0.5 } );
//			my_material = new THREE.MeshNormalMaterial( { overdraw: 0.1 } );
			
			if(i == 0){
				var object = new THREE.Mesh(geom, my_material);
				
				object.position.x = 0;
				object.position.y = 0;
				object.position.z = 0;
			}
			else{
				var object = new THREE.Mesh(geom2, my_material);
				
				object.position.x = 0;
				object.position.y = 100;
				object.position.z = 0;
			}
			
			object.castShadow = true;
			object.receiveShadow = true

			object.scale.x = 3;
			object.scale.y = 3;
			object.scale.z = 3;

			object.rotation.x = 0;
			object.rotation.y = 10;
			object.rotation.z = 0;

			scene.add( object );
			
			objects.push( object );
		}
		
		var ambientLight = new THREE.AmbientLight( 0xF0F0F0 );
		scene.add(ambientLight);
		
		var directionalLight = new THREE.DirectionalLight( 0x00ffff );
		directionalLight.position.set( 0, 50, 50 );
		directionalLight.castShadow = true;
		scene.add( directionalLight );

		var directionalLight = new THREE.DirectionalLight( 0x00ffff );
		directionalLight.position.set( 0, -50, -50 );
		directionalLight.castShadow = true;
		scene.add( directionalLight );
		
		raycaster = new THREE.Raycaster();
		mouse = new THREE.Vector2();

		renderer = new THREE.CanvasRenderer();
		renderer.setClearColor( 0xf0f0f0 );
		renderer.setPixelRatio( window.devicePixelRatio );
		renderer.setSize( $(container).innerWidth(), glob_h);
		renderer.shadowMapEnabled = true;

		container.appendChild( renderer.domElement );
		
		container.addEventListener( 'mousedown', onDocumentMouseDown, false );
		
		controls = new THREE.TrackballControls( camera, renderer.domElement );
		controls.rotateSpeed = 5;
		controls.minDistance = 100;
		controls.maxDistance = 500;
		controls.addEventListener( 'change', render, false ); 
		
		container.addEventListener( 'mouseup', onDocumentMouseUp, false );
		window.addEventListener( 'resize', onWindowResize, false );
}

function onWindowResize() {
	camera.aspect = $(container).innerWidth() / glob_h;
	camera.updateProjectionMatrix();

	renderer.setSize( $(container).innerWidth(), glob_h );
}

function onDocumentChange( event ){
	console.log('onDocumentChange' + key_mouse);
	key_mouse = true;
	render();
}

function onDocumentMouseUp( event ) {
	console.log('onDocumentMouseUp' + key_mouse);
	if (key_mouse == false)
		onDocumentMouseDown( event );
	key_mouse = false;
}

function onDocumentMouseDown( event ) {
	console.log('onDocumentMouseDown' + key_mouse);
	event.preventDefault();
	mouse.x = ( (event.clientX - $(container).offset().left) / renderer.domElement.clientWidth ) * 2 - 1;
	mouse.y = - ( (event.clientY - $(container).offset().top) / renderer.domElement.clientHeight ) * 2 + 1;
	raycaster.setFromCamera( mouse, camera );

	var intersects = raycaster.intersectObjects( objects );
	
	if ( intersects.length > 0 ) {
		intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
	}
}

function animate() {
	requestAnimationFrame( animate );
	render();	
	if(typeof controls !== "undefined")
		controls.update();
}

function render() {
	camera.lookAt( scene.position );
	
	renderer.render( scene, camera );
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Three.js: нет тени SVARAI Элементы интерфейса 2 20.04.2014 15:52
проверить находится курсор на объекте или нет agert Events/DOM/Window 3 20.01.2014 14:34
Работа с radiobutton djsadd Элементы интерфейса 2 06.04.2011 08:37
Почему то работает, то нет? gyunduz Общие вопросы Javascript 0 22.01.2011 16:08
Как узнать свернуто окно браузера или нет. bar-boss Events/DOM/Window 3 25.09.2008 16:09