Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: marcode en 27 de Junio de 2008, 06:53:28 PM

Título: Orientar impostores escalados
Publicado por: marcode en 27 de Junio de 2008, 06:53:28 PM
Para orientar un impostor (sprite 3d) a la cámara, basta con multiplicarlo por la inversa de la matriz de vista. Sin embargo al escalar o rotar la matriz del impostor, ya no funciona correctamente. Los vectores de rotación y de escalado siempre deben ser los de la matriz de identidad.

¿Hay alguna solución recomendable?, ¿o mejor cambiar el sistema y hacerlo como se indica aquí?
http://www.fuzzygamedev.com/2007/03/24/billboards/3/
Título: Orientar impostores escalados
Publicado por: Pogacha en 27 de Junio de 2008, 08:55:48 PM
Eso es solo un poco de algebra ...
Debes estar fallando en premultiplicar o postmultiplicar la matriz
Título: Orientar impostores escalados
Publicado por: marcode en 28 de Junio de 2008, 01:54:59 PM
pues no sé en qué falla, porque en principio parece que funciona bien, pero basta por ejemplo con escalar el ancho por dos, para que se produzcan deformaciones que estiran el rectángulo en algunas esquinas a medida que roto la cámara sobre él.
Título: Orientar impostores escalados
Publicado por: Pogacha en 28 de Junio de 2008, 04:17:19 PM
Para empezar te diria que tienes que multiplicar por la inversa de la matriz Vista sin el desplazamiento, lo unico que quieres es que este escalado y orientado con esa matriz. O sea tienes que tomar la submatriz de 3x3.

Luego de eso tienes que ver como se compone la MVP.
Si se compone M * V * P, basta con hacer M * iV3 * V * P o sea tienes que post multiplicar la matriz model.

Pero puede que no se componga asi, por eso debes estudiar el caso.
Título: Orientar impostores escalados
Publicado por: marcode en 28 de Junio de 2008, 06:09:54 PM
Sí, hago lo de multiplicar por la inversa de la vista poniendo a cero la traslación, sino cambiaría de posición.

El caso es que el objeto en cuestión debe de ser la matriz de identidad, es decir que no se puede modificar su escala lo más mínimo, entonces falla.

Supongo que la solución como dices, pasa por guardar el escalado, poner la orientación/escalado de "identidad", o como se diga. Y luego aplicar el escalado de alguna manera.

Miraré a ver si se puede hacer multiplicando de nuevo por una matriz que contenga la orientacion/escalado del billboard. aunque por lo que he visto, las solución rápida no pasa por ahí, y me temo que tendré que usar otra técnica.

http://www.lighthouse3d.com/opengl/billboarding/
Título: Orientar impostores escalados
Publicado por: AK47 en 28 de Junio de 2008, 06:18:56 PM
¿Has probado a salsear con el orden de la multiplicación de las matrices? Se supone que coges el quad del impostor, lo escalas al tamaño que quieras y luego lo orientas con la matriz "billboard" de la camara, es decir, la inversa de la matriz de vista de la camara con 0 de traslación. Vamos, este es el orden de multiplicación que toca.
Título: Orientar impostores escalados
Publicado por: marcode en 28 de Junio de 2008, 06:28:07 PM
Cita de: "AK47"¿Has probado a salsear con el orden de la multiplicación de las matrices? Se supone que coges el quad del impostor, lo escalas al tamaño que quieras y luego lo orientas con la matriz "billboard" de la camara, es decir, la inversa de la matriz de vista de la camara con 0 de traslación. Vamos, este es el orden de multiplicación que toca.

Supuestamente hago eso, aunque atajo, multiplico la matriz del impostor ya escalada por la matriz de la cámara en lugar de invertir la vista (que sería la misma).

A lo mejor puede ser primero multiplicar por la vista y luego escalar.

Haré diferentes pruebas a ver...
Título: Orientar impostores escalados
Publicado por: AK47 en 28 de Junio de 2008, 08:07:09 PM
Haz pruebas si, porque es como se ha comentado en el hilo: escalar y mover el impostor a donde quieras, y con la matriz "billboard" lo orientas a la camara :)
Título: Orientar impostores escalados
Publicado por: Pogacha en 28 de Junio de 2008, 08:36:08 PM
Se entiende que V * P != P * V ?
O sea la multiplicacion de matrices no es conmutativa
Por eso tienes que tener cuidado con esto.