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 - это относительно какого центра вращать камеру.