three.js вращение камеры вокруг объекта 
		
		
		
		В примерах есть подобный код: 
	camera.position.x = (Math.cos(timer) * 2000); camera.position.z = (Math.sin(timer) * 2000); camera.lookAt(object.position); Он позволяет вращать камеру вокруг одной оси, но не той которой нужно, как исправить положение?  | 
	
		
 camera.position.x = (Math.cos(timer) * 2000); camera.position.z = (Math.sin(timer) * 2000); ну дык ты ж меняешь положение камеры у осей X и Z, выставь нужную ось (или оси) и будет тебе счастье. например camera.position.y = (Math.cos(timer) * 2000); camera.position.z = (Math.sin(timer) * 2000);  | 
	
		
 Может это особенность движка, но в этом случае, он исчезает и появляется по другую сторону оси, зеркально отображенный 
	 | 
	
		
 куда более вероятно что ты просто камеру перевернул) 
	 | 
	
		
 Собственно поэтому и обратился на форум, что не нашел вменяемой документации по параметрам камеры. 
	Отдельно вращение камеры есть camera.rotation.set(4.71238898, 0, 0);но оно не работает вместе с camera.lookAt(object.position);  | 
	
		
 Вращение объекта по вертикали и по горизонтали обходом камеры вокруг него 
		
		
		
		
function angleDecade(angle){
				if(angle >= 0 && angle <= 3.1416/2){
					return 1;
				} else if(angle > 3.1416/2 && angle <= 3.1416){
					return 2;
				} else if(angle > 3.1416 && angle <= 3.1416*1.5){
					return 3;
				} else {
					return 4;
				}
			}
			
			
			function angleTo2PiRange(angle){
				while(angle < 0){
					angle += 2*3.1416;
				}
				
				var count = Math.floor(angle/(2*3.1416));
				
				
				angle = angle - count*(2*3.1416);
				if(angleDecade(angle) == 1){
					var sin = 1;
					var cos = 1;
				} else if(angleDecade(angle) == 2){
					var sin = 1;
					var cos = -1;
				} else if(angleDecade(angle) == 3){
					var sin = -1;
					var cos = -1;
				} else {
					var sin = -1;
					var cos = 1;
				}
				
				return {angle:angle,sin:sin,cos:cos,decade:angleDecade(angle)}
				
			}
			
			
			function setCameraPositionOnVerticalRotation(radius,angle_inc_z){
				angle_z += angle_inc_z;
				var angle = angleTo2PiRange(angle_z);
				
				angle_z = angle.angle;
				
				/* Если Вы хотите ограничить вращение по вертикали от 0 до 180%
				if(angle.cos < 0){
					angle_z -= angle_inc_z;
					return;
				}
				*/
				
				
				
					camera.position.z = radius * Math.cos(angle_z) /** angle.cos*/ + objectCenter.z;
					
					camera.position.y = radius * Math.sin(angle_z) /** angle.sin*/ + objectCenter.y;
					
					
					
						//camera.position.x = objectCenter.x;
					camera.lookAt(new THREE.Vector3(objectCenter.x,objectCenter.y,objectCenter.z));
					
					
					
					
					if(angle.sin < 0){
						camera.rotation.z = 3.1416*2;
					} else {
						camera.rotation.z = 0;
					}
					
				 
				//camera.lookAt(new THREE.Vector3(objectCenter.x,objectCenter.y,objectCenter.z));
			}
			
			function setCameraPositionOnHorisontalRotation(radius,angle_inc_x){
				angle_x += angle_inc_x;
				
				var angle = angleTo2PiRange(angle_z);
				
				//angle_x = angle.angle;
				
				
				
					camera.position.x = radius * Math.cos(angle_x) /** angle.cos*/ + objectCenter.x;
					
					camera.position.z = radius * Math.sin(angle_x) /** angle.sin*/ + objectCenter.z;
					
					
					
						//camera.position.x = objectCenter.x;
					camera.lookAt(new THREE.Vector3(objectCenter.x,objectCenter.y,objectCenter.z));
					
					
					
					
					if(angle.sin < 0){
						//camera.rotation.x = 3.1416*2;
					} else {
						//camera.rotation.x = 0;
					}
					
				 
				//camera.lookAt(new THREE.Vector3(objectCenter.x,objectCenter.y,objectCenter.z));
			}
Последние 2 метода вызывают вращение на угол inc_angle_*(z или x), при этом первоначально должно быть вот так: var angle_x = 0; var angle_y = 0; var angle_z = 0; objectCenter - это относительно какого центра вращать камеру.  | 
	
		
 Вращение камеры вокруг объекта по вертикали и по горизонтали 
		
		
		
		Да, кстати, последние 2 функции надо изменить: 
	
function setCameraPositionOnVerticalRotation(radius,angle_inc_z){
				angle_z += angle_inc_z;
				var angle = angleTo2PiRange(angle_z);
				
				
				if(angle.cos < 0){
					angle_z -= angle_inc_z;
					return;
				}
				
				angle_z = angle.angle;
				
					camera.position.z = radius * Math.cos(angle_z)  + objectCenter.z;
					
					camera.position.y = radius * Math.sin(angle_z)  + objectCenter.y;
					
					
					
						//camera.position.x = objectCenter.x;
					camera.lookAt(new THREE.Vector3(objectCenter.x,objectCenter.y,objectCenter.z));
					
					
					
					/*
					if(angle.cos < 0){
						camera.rotation.z = 3.1416*2;
					} else {
						camera.rotation.z = 0;
					}
					*/
					
				 
				//camera.lookAt(new THREE.Vector3(objectCenter.x,objectCenter.y,objectCenter.z));
			}
			
			function setCameraPositionOnHorisontalRotation(radius,angle_inc_x){
				angle_x += angle_inc_x;
				
				var r = radius * Math.cos(angle_z);
				
				var angle = angleTo2PiRange(angle_x);
				
				//angle_x = angle.angle;
				
				
				
					camera.position.x = r * Math.cos(angle_x)  + objectCenter.x;
					
					
					
					
					
					camera.position.z = r * Math.sin(angle_x) + objectCenter.z;
					
					
					
					
					
					
					
					
					
						//camera.position.x = objectCenter.x;
					camera.lookAt(new THREE.Vector3(objectCenter.x,objectCenter.y,objectCenter.z));
					
					
					
					
					
			}
 | 
| Часовой пояс GMT +3, время: 08:17. |