pinopop escribió:te ha quedado genial...no uso gx por k no lo se usar
unas preguntas,en gx como se dibuja una imagen y en k formato deve estar?
grax
Bueno, Wii puede usar entre otros, color RGB5A3, RGB565, RGBA8, CI4 y CI8.
Todos los colores tienen como color de menos peso el Azul, asi que en realidad deberian nombrarse como BGRA, pero weno
RGB5A3 es por un lado RGB5A1 si el bit de mas peso (alpha) está activo, pero si no lo está, entonces es RGB4A3 (los numeros representan los bits por componente). Es simplemente una optimización inteligente.
CI4 y CI8 son indexados a una paleta y se pueden usar hasta 32 paletas, si no recuerdo mal. La pega: solo soporta 16 bits en las entradas.
El problema es que la textura se debe organizar como tiles: en mis ejemplos, yo proporciono una utilidad llamada tiling4x4(), aunque ya la debería cambiar de nombre, porque soporta tiles de 4x4, 8x4 y 8x8 para todos los modos que describo arriba. Ademas, flushea la RAM directamente
Tambien soporto los pseudo colores SRGBA8, SRGB565 y SRGB5A1 cuya diferencia es que invierten el Rojo y el Azul (SRGB5A1 en Wii se usaría como RGB5A3). Para mi es mas comodo así porque aparte de estar acostumbrado, utilizo mi utilidad Sprite Gen para los graficos.
Tambien proporciono una funcion ctlut() para convertir paletas de colores, aunque solo sea en el rango de 16 bits.
Tengo ejemplo de sprites utilizando paleta y color de 16 bits, aparte de que la carga de texturas se detallará ampliamente en el PDF ya que tambien la idea es que sea un documento de consulta rapida y donde mirar como se realizan ciertas tareas comunes.
Nekete escribió:·He visto el vídeo y
Espero como agua de mayo el PDF(me puse con OpenGL hace poquito).
Gracias de nuevo
Bueno, esto se parece bastante a OpenGL (de ahí que yo sepa bastantes cosas, aparte de la info obtenida por otros medios, como por ejemplo, ir probando cosas para estudiar el efecto).
Lo mas complicado, es el texture environment, que tiene dos formas de utilizarse: una bastante sencilla y que no guarda mucha diferencia sobre los modos normales en OpenGL (DECAL, MODULATE, BLEND, ETC) y otra que consiste en ponerse el mono de trabajo y programar las operaciones para color y alfa directamente.
El resultado de ajustar las cosas a mano, es que puedes hacer cosas tan interesantes como la demo esa que he colgado y aunque desde fuera de contexto parece chino, la verdad es que cuando sabes como trabaja, no es nada dificil (como todo cuando se sabe, jeje)
Por ejemplo, ésta seccion:
// SHADOW TEXTURE
GX_SetTevOrder(tevstage, GX_TEXCOORD1, GX_TEXMAP0, GX_COLOR0A0);
GX_SetTevKAlphaSel(tevstage, GX_TEV_KASEL_1);
GX_SetTevColorIn(tevstage, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
GX_SetTevAlphaIn(tevstage, GX_CA_TEXA, GX_CA_A1, GX_CA_KONST, GX_CA_ZERO);
GX_SetTevColorOp(tevstage, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV );
GX_SetTevAlphaOp(tevstage, GX_TEV_COMP_A8_EQ, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,GX_TEVPREV);
tevstage++;
Esto compara si el Alfa de referencia pasado en el Registro 1 es igual al del mapa de textura 0 (textura sombra en mi ejemplo)
y devuelve Alfa=1.0 (KONST) si lo es o Alfa=0.0f.
La coordenadas de textura son obtenidas de TEXCOORD1 que a su vez está programado para que la fuente sean las coordenadas de posicion del objeto y se aplique la matriz de proyeccion de sombra (que no se ve ahi, evidentemente)
El tema es que si dibujas un objeto desde la proyeccion de la luz de un determinado color, si ese color es visible en la textura (captura de framebuffer), es que ese color no está en sombra
Ahí tienes en esencia, lo que hace el Stencil Buffer en otras gráficas. Luego, hay algo mas código por medio porque por ejemplo, hay que descartar el color 0 como sombra (para que el fondo no de por culo cuando te sales del limite de la textura), limitar el alpha minimo, mezclarlo con el color del objeto y con la textura, etc
Pero vamos, el TEV es Dios aquí y esa es una de las cosas mas 'densas' que tengo que explicar en el PDF