Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Orientar impostores escalados

Iniciado por marcode, 27 de Junio de 2008, 06:53:28 PM

« anterior - próximo »

marcode

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/
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Pogacha

Eso es solo un poco de algebra ...
Debes estar fallando en premultiplicar o postmultiplicar la matriz

marcode

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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Pogacha

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.

marcode

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/
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

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.

marcode

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...
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

AK47

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 :)

Pogacha

Se entiende que V * P != P * V ?
O sea la multiplicacion de matrices no es conmutativa
Por eso tienes que tener cuidado con esto.






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.