Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - tawky

#1
Cita de: Warchief en 18 de Agosto de 2011, 07:03:12 PM
VRP es la posicion.
VPN es la direccion donde mira.
VUV es el vector "up" de la camara.

A partir de VPN y VUV se puede obtener el vector right/left mediante producto vectorial. Eso te da los 3 ejes de coordenadas de la camara, que junto a la posicion, te da la transformacion de la camara. Lo que tienes que hacer en construir esa matriz de transformacion, que sera de la forma:
M = RT (donde R es rotacion y T traslacion)

Sean n, u y v los ejes de la camara en coordenadas locales. (* es producto vectorial)
n = VPN / |VPN| (es decir, n es el vector front de la camara, que es como dijimos VPN, pero hay que normalizar)
u = n*VUV / |n*VUV| (es decir, u es el vector up de la camara en coordenadas locales y normalizado)
v = u*n (obtenemos vector right/left de la camara, que ya esta normalizado por ser producto de dos normalizados)
Con esos tres ejes ya tienes R = (u, v, n)

Ya solo queda hallar la traslacion, que se calcula transformando el punto VRP a las nuevas coordenadas:
t = -pR (donde p es el punto = VRP, y R es la matriz de rotacion que hemos creado)

M = RT, dado que R es 3x3 y T 3x1, necesitas anyadir W 1x3 = 0,0,0,1 para tener una matriz de transformacion 4x4.
Pon la matriz a la camara y problema resuelto.

Espero que con eso puedas entender mejor ahora las definiciones que leas por ahi.

Si quieres hacer trampas mira el metodo computeMatrix() de aqui:
http://www.cs.ucl.ac.uk/teaching/3079/java-lab1/question/camera.java

IMPORTANTE:
El orden de los vectores y de los productos vectoriales es importante para la orientacion de la camara, asegurate de que el eje de coordenadas (left/right) coincide con la escena que tienes en opengl. En el fichero java aplican signo negativo a n, probablemente por esta razon.


Aun sigo liado con la cámara. Pero me quedo rematarlo.
Ya tengo la cámara casi implementada.
Los pasos que sigo para son los siguientes:
a- Doy por consola VRP,VPN,VUV.
Como la cámara es fija , los translate y rotate se hace sobre el objeto.
b- Translate(-VRPx,-VRPy,VRPz).
c- Roto sobre X poniendo el VPNy=0 , el VPNz cambia en consecuencia.
d- Roto sobre Y ponuendo el VPNx=0, el VPNz cambia en consecuencia.
e- Roto sobre Z para alinear la u sobre el eje X. Necesito calcular u y v.

n = VPN / |VPN| (es decir, n es el vector front de la camara, que es como dijimos VPN, pero hay que normalizar)
u = n*VUV / |n*VUV| (es decir, u es el vector up de la camara en coordenadas locales y normalizado)
v = u*n (obtenemos vector right/left de la camara, que ya esta normalizado por ser producto de dos normalizados)
Con esos tres ejes ya tienes R = (u, v, n)

PROBLEMA. Antes del paso c calculo el n,u,v, pero tras los pasos c y d se me han movido.

De n(VPN) llevo el control, pero de u no se como hacerlo.





#2
Hola , sobre la función gluLookAt:

Dices que:
eye = VRP
center = VRP + VPN
up = VUV

No entiendo por que sumar el VRP + VPN.

Si yo tengo un objeto en el 0,0,0  quiero poner una cámara para verlo. Debo de poner el gluLookAt(0,0,-20,0,0,0.0,1,0) no?

si le sumo el VRP como dices quedaria gluLookAt(0,0,-20,0,0,-20,0,1,0) y esto no tiene sentido no?
#3
Cita de: tawky en 24 de Agosto de 2011, 12:40:54 PM
Hola. Sigo usando el gluLookAt haber si me entero del funcionamiento.

Estoy poniendo la botonera de la cámara.

ASDW lo uso para mover el VPN en x e y.

Los cursores los quiero usar para girar la cámara.

¿Que valores le tengo que dar al VRP para que la cámara vaya girando sobre el ejeY con un incremento de 15 grados cada pulsación?

Por favor, ¿alguien sabe como girar la cámara?

Gracias.
#4
Campus Party / Re: Campus Party Milenio 2011
25 de Agosto de 2011, 05:27:25 PM
Cita de: josepzin en 25 de Agosto de 2011, 04:51:13 PM
Cita de: [EX3] en 25 de Agosto de 2011, 04:48:17 PM
P.D.: Te imaginas una Campus Party sin gritos ni berridos de "Bukakeeee", frikis viciandose las 24 horas oliendo a sudor ni tonterias similares? Pues esta es asi xD

¡¡Eso no es una party!!

Tienes toda la razón eso no es una party. :shit: jajajjaajja cuidaaaaaaoo bukakeeeeee
#5
Campus Party / Re: Campus Party Milenio 2011
25 de Agosto de 2011, 11:28:51 AM
Hola.

Me acabo de enterar.

¿Solo va por invitacion?
#6
Hola. Sigo usando el gluLookAt haber si me entero del funcionamiento.

Estoy poniendo la botonera de la cámara.

ASDW lo uso para mover el VPN en x e y.

Los cursores los quiero usar para girar la cámara.

¿Que valores le tengo que dar al VRP para que la cámara vaya girando sobre el ejeY con un incremento de 15 grados cada pulsación?
#7
Creo que empiezo a entender el funcionamiento de esto, pero aun me queda.

¿Al iniciar una cámara donde esta colocada, donde mira y donde tiene el VUV?

¿ Así seria?
Vamos a calcular la n.

//vpn
  • ;vpn[y];vpn[z]; aqui tenemos los valores de VPN.
    mag = sqrt(vpn
  • * vpn
  • + x[y] * x[y] + x[z] * x[z]);
    if (mag)
    {
       n
  • = vpn
  • /mag;
       n[y]= vpn[y] /mag;
       n[z]=vpn[z] / mag;
    } //sacamos la n , ¿ya esta normalizada no?

    aux_u
  • = n
  • *VUV
  • ;
    aux_u[y] = n[y]*VUV[y];
    aux_u[z] = n[z]*VUV[z];

    mag = sqrt(aux_u
  • * aux_u
  • + aux_u[y] * aux_u[y] + aux_u[z] * aux_u[z]);
    if (mag)
    {
       u
  • = aux
  • /mag;
       u[y]= aux[y] /mag;
       u[z]=aux[z] / mag;
    } //sacamos la u , ¿ya esta normalizada no?

    v
  • = u
  • *n
  • ;
    v[y] = u[y]*n[y];
    v[z] = u[z]*n[z];

    a partir de ahí no se como hacer la translacion y mucho menos la rotación....

#8
La cámara que enfoca la escena completa es:

Plano_delantero=10;
Plano_trasero=6000;
Observador_distancia=32*Plano_delantero;
Observador_angulo_x=-30;
Observador_angulo_y=0;
camX=0;
camY=-80;

glEnable(GL_DEPTH_TEST); // se habilita el z-bufer

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-Tamanio_x,Tamanio_x,-Tamanio_y,Tamanio_y,Plano_delantero,Plano_trasero);

Para moverla Sin VRP, ni VPN ni VUV :

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(camX,camY,-Observador_distancia);
glRotatef(Observador_angulo_x,1,0,0);
glRotatef(Observador_angulo_y,0,1,0);

Tras esto me sale así:



He usado tu valores de java: VRP 0,0,0 VPN 0,0,-1 VUV 0,1,0

Y me sale así: pero no se si es correcto.

#9
Primero voy a empezar probando con gluLookAt para ver el funcionamiento.

Actualmente tengo un código así:

printf("Introduce la coordenada X del VRP ");scanf("%f",&Geyex);
printf("Introduce la coordenada Y del VRP ");scanf("%f",&Geyey);
printf("Introduce la coordenada Z del VRP ");scanf("%f",&Geyez);
printf("Introduce la coordenada X del VPN ");scanf("%f",&Gcenterx);
printf("Introduce la coordenada Y del VPN ");scanf("%f",&Gcentery);
printf("Introduce la coordenada Z del VPN ");scanf("%f",&Gcenterz);
printf("Introduce la coordenada X del VUV ");scanf("%f",&Gupx);
printf("Introduce la coordenada Y del VUV ");scanf("%f",&Gupy);
printf("Introduce la coordenada Z del VUV ");scanf("%f",&Gupz);

gluLookAt(Geyex,Geyey,Geyez,Geyex+Gcenterx,Geyey+Gcentery,Geyez+Gcenterz,Gupx,Gupy,Gupz);

Lo que no se muy bien es que valores meterle por consola.

He probado por ejemplo con 0,0,20 0,0,0 1,1,1 pero pierdo de vista la escena.
¿ Podéis pasarme unos valores validos?
- Yo creo que con el VRP no hay problemas, solo lo he alejado algo en el eje z.
- Con el VPN l estoy diciendo que mire al eje de coordenadas.
- VUV aqui es donde me pierdo , no se muy bien lo que he hecho poniendo 1,1,1.
#10
Entonces.Voy a explicarlo como si de una cámara real se tratase para ver si me entero de una vez.  :-[, si hay algo mal solo decirlo que seguro que me equivoco.

VRP donde coloco el trípode de la cámara.
VPN ahora muevo la cámara para que apunte a donde quiero.
VUV es como he anclado la cámara al trípode, es decir con el visor arriba, abajo, izquierda, etc.

Me he perdido un poco, ¿para que sirve el  vector right/left?

Creo que me faltan matemáticas para entender todo esto. Para que sirve hacer el producto vectorial y luego normalizar, explícamelo de la forma mas sencilla que no tengo mucho nivel  ^_^'.

Voy a googlear un poco a ver si entiendo mas todo esto que me has puesto.   

Muchas gracias. ;)

#11
Si necesitáis que os de mas información para entender lo que necesito decírmelo.

Tengo realizada una escena con C y OpenGL, la camara esta colocada por defecto.

Lo que quiero hacer es introducir una segunda cámara, y pasandole la VRP, VPN y VUV por consola calcular el sitio y hacia donde miraría la cámara.

Pero es que no tengo ni idea de como se hace ni teórica ni practica.

Cualquier cosa que podáis pasarme o decirme donde mirar me sera de gran ayuda, estoy bloqueado con esto.

Gracias.
#12
Programación gráfica / Teoría para colocar una cámara.
17 de Agosto de 2011, 09:35:15 AM
Hola.

Necesito ayuda para colocar una cámara dándome el VRP , VPN y el VUP.

Las definiciones matemática que encuentro por ahí no las entiendo, y sin eso no puedo ponerme a programar el algoritmo.

Gracias de antemano.
#13
Que foro? ???

teneis el enlace al mismo??
#14
Lo que no veo claro , es que si el voto era del publico. Ni a mi 'como publico' ni a mis compañeros nos preguntaron que mod nos gustaba mas.

Hay algo raruu ahí.

Yo fui tb el año anterior y me parece a mi que todo a estado muxo mas mas organizado en general y en los concursos en concreto.
#15
Hay exactamente estábamos sentados. :D

La torre de metacrilato(placa quemada) que esta en la cabeza de se me peto en dia antes de la party. Y tuve que improvisar otro PC. Por eso esta casi vaciá esa caja.





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.