[C con Clase] FW: Resolver Z usando los angulos Horizontal y Vertical

Ferran Ferri ferranferri en gmail.com
Vie Ago 28 16:23:31 CEST 2009


Mmmm, te hablo de memoria asi que me puedo equivocar. Seria algo asi como

1. loadIdentity()
2. PintarEscena()
3. loadIdentity()
4. glRotate(-angulo)
5. glTranslate(-c1, -c2, -3)
6. Pintar_Objeto_En_Cuestion()

Olvida el glLookat(). Lo que hago aqui es:

1. Cargo matriz identidad que resetea coordenadas del mundo. La
camara, desde el punto de vista de opengl() ahora esta tambien en el
0,0,0
2. Pinto los objetos de la escena
3. Volvemos a poner la camara en el 0,0,0 aunque la escena ya esta puesta
4 - 5. Ahora viene el truco. En opengl mover la camara y mover el
mundo es equivalente siempre que los movimientos sean contrarios. Esto
significa que si le sacas una foto a una montanya, o te acercas tu
hacia la montanya o la montanya se aleja de ti. Los que haces con
estas lineas es primero rotar el mundo los mismo grados en que lo
harias con la camara pero en sentido contrario. Y luego lo traslado en
sentido contrario.
6. Finalmente pinto el objeto que siempre estara en el mismo lugar
respecto a la camara. Tambien puedes aplicarle transformaciones a este
objeto que siempre se movera con respecto a la posicion de la camara.


Ferran



2009/8/28 Pedro Rodríguez González <sr.whiteskull en hotmail.com>:
> Si, uso una especie de "miniopenGl", un opengl con menos funciones. Suena
> interesante lo que propones, dices una cosa así:
> ...
> // renderizo los objetos de la escena
> // Reseteo la matriz MODELVIEW
> glMatrixMode(GL_MODELVIEW);
> glLoadIdentity();
>
> gluLookAt( pos.x, pos.y, pos.z, vista.x, vista.y, vista.z, 0.0, 1.0, 0.0);
>
> // Objeto en questión
> Objeto->render(pos.x+0.0,pos.y+0.0,pos.z+0.0, 0.0,0.0,0.0);
> glFlush(0); // Vacío el buffer
> // y vuelta a empezar
> Lo probaré y luego cuento la experiencia
>> Date: Fri, 28 Aug 2009 11:12:29 +0200
>> From: ferranferri en gmail.com
>> To: cconclase en listas.conclase.net
>> Subject: Re: [C con Clase] FW: Resolver Z usando los angulos Horizontal y
>> Vertical
>>
>> Si estas trabajando con OpenGL puede haber otra tecnica mas chapuzas
>> pero que sirve igual. Primero dibujas la escena, reseteas la matriz
>> modelview, situas la camara y despues pones el objeto sin resetear
>> otra vez la modelview. Con eso consigues que la posicion de ese objeto
>> sea siempre respecto a la camara.
>>
>> En DirectX funciona exactamente igual, aunque no conozco tan bien el
>> API como para decirte los pasos pero es basicamente lo mismo.
>> Ferran
>>
>>
>>
>> 2009/8/27 Pedro Rodríguez González <sr.whiteskull en hotmail.com>:
>> > Creo q no me expliqué claramente Steve, pero gracias por responder, el
>> > tema
>> > es que estoy desarrollando una aplicación 3d (casi no hace falta ni que
>> > lo
>> > mencione), y tengo una "camara", en las posicion pos(vector3D), que a su
>> > vez
>> > apunta a las coordenadas vista(vector3D), sólo con estos datos "podría"
>> > colocar un elemento orbitando alrededor de la cámara, de ahí que use un
>> > vector de coordenadas p, si sólo fuera que girara alrededor cómo la
>> > "Luna"
>> > sobre la "Tierra", eso es algo que está chupao... y es lo que muestro en
>> > el
>> > código, pero realmente lo que necesito es que ese objeto se mantenga
>> > fijo
>> > delante de la vista de la cámara, mire a donde mire... en éste esquema
>> > "chapucilla" se puede apreciar más o menos la idea.
>> > Y claro no lo consigo, hace un par de años buenos lo hice, se que era
>> > así
>> > más o menos, pero todo los trabajos que hice hace años se quedaron en
>> > el portátil desguazado que regalé al instituto (para su estudio)...
>> >
>> > Si no me equivoco, ||p|| = radical( (p.x)^2 + (p.y)^2 + (p.z)^2 ) esta
>> > formula me devuelve la distancia entre dos vectores, no habré usado ni
>> > pocas
>> > veces ni nada...
>> >> Date: Thu, 27 Aug 2009 15:26:56 -0400
>> >> From: srd4121 en njit.edu
>> >> To: cconclase en listas.conclase.net
>> >> Subject: Re: [C con Clase] FW: Resolver Z usando los angulos Horizontal
>> >> y
>> >> Vertical
>> >>
>> >> Hola Pedro,
>> >>
>> >> Pedro Rodríguez González wrote:
>> >> > Q tal chicos, no se cómo andarán de matemáticas, pero yo
>> >> > fatal... Ruborizado
>> >> >
>> >> > No consigo dar con la posición Z para un vector 3D...
>> >> >
>> >> > *Código:*
>> >> > ...
>> >> > ...
>> >> > // obtenemos el angulo en radianes
>> >> > anguloH=atan2(vista.z-pos.z,vista.x -pos.x);
>> >> > anguloV=atan2(vista.z-pos.z,vista.y -pos.y);
>> >> >
>> >> > p.x=radio*cos(anguloH);
>> >> > p.y=radio*cos(anguloV);
>> >> > // Que pueo hacer X o Y
>> >> > //p.z=sin(anguloH); // funciona pero solo en horizontal
>> >> > //p.z=sin(anguloV); // funciona pero solo en vertical
>> >> > ...
>> >> > ...
>> >> >
>> >> >
>> >> >
>> >> > gracias a todo aquel que me aporte una solución sencilla...
>> >> >
>> >>
>> >> Según estoy viendo, quieres crear un vector, p, para que vaya de 'pos'
>> >> a
>> >> 'vista'. Si esto es así, no necesitas hacer todo esto. Simplemente,
>> >> crea
>> >> el vector a partir de dos puntos; esto es,
>> >>
>> >> p = vista - pos
>> >>
>> >> Por componentes, esto es equivalente a:
>> >>
>> >> p.x = vista.x - pos.x
>> >> p.y = vista.y - pos.y
>> >> p.z = vista.z - pos.z
>> >>
>> >> Si quieres que la magnitud (o longitud) del vector, p, sea igual a
>> >> 'radio', entonces se tratará de una especie de "normalización". Esto
>> >> es,
>> >>
>> >> p = (radio / ||p||) * p,
>> >>
>> >> donde ||p|| = magnitud del vector p, que se calcula así:
>> >> ||p|| = radical( (p.x)^2 + (p.y)^2 + (p.z)^2 )
>> >>
>> >> Ahora p tendrá de magnitud 'radio'.
>> >>
>> >>
>> >> Espero que esto te oriente.
>> >>
>> >> Steven
>> >>
>> >>
>> >> _______________________________________________
>> >> Lista de correo Cconclase Cconclase en listas.conclase.net
>> >>
>> >> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> >> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>> >
>> > ________________________________
>> > Get news, entertainment and everything you care about at Live.com. Check
>> > it
>> > out!
>> > _______________________________________________
>> > Lista de correo Cconclase Cconclase en listas.conclase.net
>> >
>> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>> >
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
> ________________________________
> Connect to the next generation of MSN Messenger  Get it now!
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>




Más información sobre la lista de distribución Cconclase