Pregunta

Heyo,

Actualmente estoy trabajando en un proyecto donde tengo que colocar la cámara de tal manera que el movimiento completo de un personaje sería visible sin mover la cámara. Tengo la posición donde comienza el carácter, así como la distancia máxima que el personaje va a viajar en las tres direcciones (X, Y, y Z). También tengo el campo de visión (que es de 90 grados).

¿Hay una ecuación que va a averiguar dónde tengo que colocar la cámara por lo que no tendrá que pasar a ver el movimiento completo?

Nota:. Esto es usando OpenGL

Aclaración: La cámara debe estar "delante" del personaje que está en el movimiento, no por encima

.

También le mueve a lo largo de un plano de tierra.

¿Fue útil?

Solución

Si comete un ámbito de delimitación de los puntos, todo lo que tiene que hacer es mantener la cámara a una distancia mayor o igual que el radio de la esfera de delimitación / sen (FOV / 2).

Por ejemplo, si usted tiene una esfera de delimitación con el radio Radius, y un campo especificado de vista FOV, la cámara sólo tiene que estar en un punto "Dist" de distancia, apuntando hacia el centro de la esfera de delimitación.

La ecuación para calcular la distancia es: Dist = Radio / sen (FOV / 2);

Esto funcionará en 3D, para una cámara en cualquier orientación.

Otros consejos

Basta con tener el alcance máximo de (X, Y, Z) no está en su propia suficiente, porque el puerto de visión esencialmente se forma de pirámide, con el vértice de la pirámide estar en la posición del ojo.

Por el bien de la discusión, vamos a suponer que todo el movimiento es en el (, Z X) plano (es decir, el suelo), y el ojo se encuentra directamente por encima de la 10m origen a lo largo del eje Y.

Si se asume una ventana cuadrada, con su campo de visión 90˚ que serías capaz de ver desde ± 10 metros a lo largo de ambas direcciones X y Z, pero sólo para los objetos que están en la tierra (Y = 0). Tan pronto como salen de la planta la vista se reduce. Si se trata de 1m del suelo, entonces el (X, Z) medida es solamente ± 9m.

Es evidente que una cámara real podría ser colocado en la escena de todos modos, frente a cualquier dirección. Incluso el ángulo de "rollo" de la cámara podría cambiar la cantidad es visible. En realidad, hay un número infinito de tales puntos de la cámara, por lo que tendrán que limitar sus criterios un tanto.

Tome el segmento de línea desde el punto inicial al punto final. Construir un plano ortogonal a este segmento de línea a través del punto medio del segmento de línea. A continuación, coloque la cámara en algún lugar de este plano a una distancia de más de las siguientes opciones del punto de intersección del plano y la línea de mira en el punto de intersección. El vector de la cámara debe estar en el plano y el campo de visión horizontal debe ser de 90 grados.

distance = sqrt(dx^2 + dy^2 + dz^2) / 2

Esta cámara posiciones tendrán todos el punto inicial y el punto final en el borde izquierdo o derecho de la ventana de observación y verticalmente centrada.

Otra solución podría ser la de escribir una función que toma el punto inicial, el punto final, y la posición deseada de los dos puntos en la pantalla. A continuación, sólo resolver la ecuación de proyección para la transformación de la cámara.

Depende, por ejemplo, si el objeto es a mover en un plano, puede simplemente colocar la cámara fuera una bola circunscrito su área de movimiento (esto depende del hecho de que FOV es de 90, que es un ángulo de suerte).

Si el objeto es a mover en 3D, es mucho más difícil. Sería de gran ayuda si lo desea especificar la región en la que el objeto se mueve (cubo vs bola ...) y la dirección que quieren ver de.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top