Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Calculos en 3D

Iniciado por capitan_kirk, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

capitan_kirk

                                Hola, posteo este mensaje en primer lugar para dar a conocer mi escaso conocimiento (todavía) del 3D.

El problema: estoy haciendo un pseudosimulador de vuelo, tengo en una estructura la posición x,y,z de la camara así como angulo del eje y que es hacia donde mira la camara.

Bien pues hay unos objetos por el escenario con sus respectivas posiciones (conocidas) , y lo que quiero hacer es que al pulsar sobre el nombre de uno de ellos en una ventana que tengo , la camara gire hasta encararlos , es decir necesito saber como calcular cuantos grados tendría que girar mi objeto camara en el eje y hasta tener el objeto en una linea recta de visión.

Larga y Prospera vida!!!!                                

KAKSTAR

                                No te iria mejor si en lugar del angulo del eje tienes la posicion (x,y,z) y el vector Normal de la camara (x,y,z) ...

solo era una sugerencia...

el tema de encarar la camara...

existen lo que se llaman curvas de bezier que dado dos puntos (inicial y final) y dos puntos de control te encuentra la curva (una curva suave del punto inicial al final) por lo que tendrias que simplemente ir calculando los puntos por los que pasa la camara e ir modificando el vector normal de la camara hacia el objeto. Para modificar el vector normal de la camara tendrias con calcular el angulo entre este vector i el vector entre el objecto i la camara...

bueno si te sirve de algo...

talueg                                
akstar

Existen 10 tipos de personas, las que entienden binario y las que no.

Drácula

                                Esto es trivial. Existen funciones en Direct3D y OGL para hacer esto. Creo que en D3D es D3DXCameraLookAt. En todos los ejemplos de DX me parece que se utiliza esta función...                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

capitan_kirk

                                el problema es que el programa he de hacerlo con un motor 3D israelí llamado terra developer que es un pedo, y no puedo gastar funciones de direct3d , solo las que lleva el motor. Los datos que me da el motor son los que postee en mi anterior mensaje por eso necesitaba saber como hacer lo del giro a partir de esos valores. Ya que estos calculos me los tengo que hacer yo a pelo.                                

Cronodragón

                                Entonces hay que hacerlo a pata. Tienes dos puntos en el plano X-Z:



               ^ +Z

     (X1,Z1)   :

       1 *     :    (X2,Z2)

              :    * 2

              :   /

              :  /

              : /

   ............V.............> +X

               :

               :

               :

               :

               :

               :



Debes girar la cámara desde el ángulo del punto 1 al 2. Entonces necesitas conocer el valor del ángulo para el punto 1 y 2, sean A1 y A2. Estos valores los consigues con la función arcotangente:

A1 = arctan (Z1/X1)
A2 = arctan (Z2/X2)

Pero ten cuidado, pues a veces arctan devuelve el Angulo-Pi, según el cuadrante donde se encuentre el punto. En general me parece que:

si X >= 0, arctan = A
si X <  0, arctan = A-Pi

Haz las correcciones a los ángulos A1 y A2. Luego pon un ciclo a correr desde A1 hasta A2, y que vaya asignando el valor actual al ángulo de la cámara.

Espero te ayude,

- Marco

[ Este Mensaje fue editado por: Cronodragón el 2002-07-06 21:34 ]                                

Cronodragón

                                ...estaba recordando que si haces X1 o X2 = 0 te va a dar un error de división entre cero. Así que toma como caso que da Pi/2.                                

capitan_kirk

                                Me parece que así es posible que funcione , lo probaré mañana en el trabajo y ya te postearé si me ha funcionado.

Muchas gracias.                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.