Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: nsL en 08 de Octubre de 2011, 02:48:19 PM

Título: Estado de los objetos
Publicado por: nsL en 08 de Octubre de 2011, 02:48:19 PM
Buenas!

No me acaba de quedar claro, y veo que por ahi la gente cada uno de una manera, y a ver si me podeis sacar de la duda. Voy a ser breve que mis ultimos post han sido minibiblias.

Suponed que tengo un objeto:

class Cuadrado
{
float x;
float y;
.....
}

Y tengo un vertex shader (os pongo la única linea que me interesa de él):
gl_Position = uMVPMatrix * vPosition;

donde uMVPMatrix es la matriz de transformaciones y vPosition las coordenadas del vértice.

¿En algún momento modificais el array de vértices? ¿o siempre trabajais con los vertices iniciales y aplicais las transformaciones a dichos vertices? Quiero decir, ¿en algun momento actualizais el array de vértices?

Es que estoy viendo que tengo 2 opciones.

-Usar siempre los vertices iniciales (los que defino en el momento de construccion), y cada vez que hago un setPosition, pues aplico la matriz de transformacion (glTranslate) a esos vértices.
- Cada vez que haga un setPosition, actualizo mi buffer/array de vertices (que es el que luego le paso a vPosition del shader).

Tengo la impresion de que es mejor la primera (mejor rendimiento), pero entonces siempre tengo que aplicar todas las transformaciones teniendo en cuenta los vértices iniciales.

Vamos, que mi duda es. ¿Actualizais los vertices en local, o mediante transformación de los iniciales en el shader? De ser en el segundo caso, ¿guardais de alguna manera el estado actual del objeto?

Gracias  0:-)

Un saludin!
Título: Re: Estado de los objetos
Publicado por: XÑA en 08 de Octubre de 2011, 03:28:22 PM
Yo modifico los vértices si cambio el tamaño. La posición sí que viene dada por la matriz.

Es lo que hace todo el mundo. Porqué así la matriz te incluye la rotación y escalado. ;)
Título: Re: Estado de los objetos
Publicado por: nsL en 08 de Octubre de 2011, 06:49:26 PM
Ok ok tomo nota! duda resuelta

muchas gracias  ^_^