Yo estoy haciendo este programa donde usted puede hacer clic en un objeto, acercar a ella, y luego mirar desde todos los ángulos manteniendo pulsado el botón derecho del ratón y arrastrando. Necesito que la cámara se va alrededor de los objetos, no girar el objeto con la cámara mirando. Yo, sinceramente, no tienen idea de cómo las matemáticas fuera!

Para la prueba no es ya un objeto de juego con una xyz hemos seleccionado y estamos buscando

var g = new GameObject(500, 0, 0);//The game object with xyz
this.selected = g;//set selected to g

//Create and set the camera
this.camera = new THREE.PerspectiveCamera(45, w/h, 1, 10000);
this.camera.position.x = 0;
this.camera.position.y = 0;
this.camera.position.z = 0;

//set camera to look at the object which is 500 away in the x direction
this.camera.lookAt(new THREE.Vector3(this.selected.x, this.selected.y, this.selected.z));

Por lo que el radio de entre la cámara y el objeto es de 500 y mientras seleccionado y la rotación, la cámara siempre debe ser de 500 metros.

Puedo actualizar la escena aquí:

Main.prototype.update = function(){

    this.renderer.render(this.scene, this.camera);//scene is just some ambient lighting

    //what to do when mouse right is held down
    if(this.rightMouseDown){

        //placeholder functionality, needs to rotate around object based on mouse movements
        this.camera.position.x -= 5;

    }
}

¿Cómo puedo girar esta cámara en torno a g con un radio de 500?!?!

1 Comentario

  1. 4

    Como gaitat mencionado, de la esfera de mando de los controles son el mejor lugar para empezar con muchos parámetros configurables para hacer la rotación de la cámara/de la revolución fácil. Un enorme beneficio potencial de este método ( especialmente para el proyecto ), es evitar que «gimbal lock», que es la fuente de gran frustración cuando se trabaja con las rotaciones. He aquí un enlace que puede ayudarte con el Trackball controles y Orbitcontrols:

    Girar la cámara en Three.js con el ratón

    Otra opción podría ser la configuración de la cámara coordenadas a ti mismo en el bucle de animación que en realidad es bastante simple:

    var angle = 0;
    var radius = 500; 
    
    function animate() {
    ...
    //Use Math.cos and Math.sin to set camera X and Z values based on angle. 
    camera.position.x = radius * Math.cos( angle );  
    camera.position.z = radius * Math.sin( angle );
    angle += 0.01;
    ...
    }

    Otra opción sería la de conectar la cámara a un objeto de tabla dinámica y solo tienes que girar el pivote:

    var camera_pivot = new THREE.Object3D()
    var Y_AXIS = new THREE.Vector3( 0, 1, 0 );
    
    scene.add( camera_pivot );
    camera_pivot.add( camera );
    camera.position.set( 500, 0, 0 );
    camera.lookAt( camera_pivot.position );
    ...
    camera_pivot.rotateOnAxis( Y_AXIS, 0.01 );    //radians

    Si se adopta esta opción, tenga en cuenta que el objeto de la cámara está en la «cámara de pivote espacio», y puede ser más difícil de manipular más.

    • Gracias, esto realmente ayudó!!
    • Se puede explicar esta «cámara de pivote espacio» concepto? Estoy tratando de conseguir una cámara para girar alrededor de los objetos, sin pellizcos en la parte superior y la parte inferior (como la órbita de los controles, y como su código, así). Necesito un «limpiador» de rotación alrededor del centro — como si estuviera sosteniendo los objetos y girar libremente (no sólo gira en phi y en theta). Si usted puede ayudar, le estaría muy agradecido.

Dejar respuesta

Please enter your comment!
Please enter your name here