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

Ferran Ferri ferranferri en gmail.com
Vie Ago 28 11:12:29 CEST 2009


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
>




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