MOVER SPRITES CON GRRLIB

Alguien me puede ayudar a mover los sprites con el pad del wii.
he probado con if(WPAD_ButtonsDown (0) & WPAD_BUTTON_UP) { sprite.y + 4} etc. y no funciona,alguien que me ayude porfavor!!!!
pinopop escribió:Alguien me puede ayudar a mover los sprites con el pad del wii.
he probado con if(WPAD_ButtonsDown (0) & WPAD_BUTTON_UP) { sprite.y + 4} etc. y no funciona,alguien que me ayude porfavor!!!!


Lo primero, no se que haces usando GRRLIB cuando en gx.h tienes todo lo que necesitas y mas para manejar graficos (si vieras el ejemplo que tengo hecho que muestra como aplicar una sombra que envuelve diversos objetos, lo fliparias lo que se puede hacer... y tienes ejemplos que dibujan Quads por ahi y que no son nada dificiles de comprender...)

Weno, que me pierdo: ¿sprite.y + 4? nen, será sprite.y+= 4; XD .

Pero si ese no es el fallo (porque sea un fallo de escribirlo en el foro, pero en tu codigo este bien)

1) asegurate de que esa estructura sprite, no se está inicializando dentro de tu bucle.

2) asegurate de que WPAD_ScanPads(); se está llamando de forma continua en tu bucle, o no se actualizará

3) luego te aconsejaria que utilizaras la formula u32 pressed = WPAD_ButtonsDown(0); mejor, para evitar hacer tantas rellamadas a la funcion.


NOTA: Estoy preparando material sobre la utilizacion de GX, que abarcará cosas como por ejemplo, como implementar transparencia de textura (de forma que no se dibujen los pixeles transparentes, en oposicion a la translucided del blending, que si los dibuja), ajustar el alpha blending, como cargar texturas y ajustar el filtro, como capturar el framebuffer en una textura y utilizarla como si fuera el stencil buffer de otras graficas, como programar y entender el texture environment para crear efectos como el mapeo de una sombra o una luz, para ajustar iluminacion difusa y especular, para aplicar multiples texturas, como generar listas de poligonos y enlazarlas con el FIFO, como utilizar puntos de luz, etc, para que sea accesible para los que controleis menos el tema y en español ;)
ok grax,y voy a estar esperando tu documentacion de las GX
grax
pinopop escribió:ok grax,y voy a estar esperando tu documentacion de las GX
grax



Los sprites son muy faciles de manejar.

Ahora mismo, tengo preparado un ejemplo con sprites y otro que ese éste: http://www.youtube.com/watch?v=-iQPRfE-NRA
para que veas el potencial que tiene el "bicho" (aunque el video en Youtube no sea de calidad, se aprecia la sombra en tiempo real
y la reflexion en la esfera del centro, del entorno)

Aparte de los ejemplos, estoy preparando un PDF que va a ser algo así como una pequeña biblia sobre graficos 3D en general, pero evidentemente orientado hacia Wii y donde se describirán no solo como funcionan algunas delas funciones de la librería (gu.h/gx.h), si no que habrá codigo de ejemplo y enlaces a cosas como: calcular la normal de un triangulo, activar la transparencia
, translucidez, como capturar el framebuffer en una textura, como ajustar las matrices de proyeccion, mundial, la cámara, como ajustar la matriz de normales y de textura, ajustar la proyeccion para 2D, activar luces, como funciona el texture environment, etc

De momento llevo 25 paginas y apenas he arañado un poco XD (aunque he estado trabajando en los ejemplos y el del video es bastante complejo)
te ha quedado genial...no uso gx por k no lo se usar [buuuaaaa]
unas preguntas,en gx como se dibuja una imagen y en k formato deve estar?
grax
·He visto el vídeo y [oki]
Espero como agua de mayo el PDF(me puse con OpenGL hace poquito).

Gracias de nuevo
pinopop escribió:te ha quedado genial...no uso gx por k no lo se usar [buuuaaaa]
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 [oki]
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 [+risas]
Interesante;deverias poner en el pdf las caracteristicas de cada funcion de la Gx si no seria molestia XD
pinopop escribió:Interesante;deverias poner en el pdf las caracteristicas de cada funcion de la Gx si no seria molestia XD


Tampoco te creas que yo lo sé todo, que no es así. Además, más importante que saber que hace una funcion, es saber para que cojones se utiliza.

Por ejemplo, de que te vale saber que hay una función que carga una paleta y que otra función carga la textura con los indices de color, si no sabes cómo conecta una con otra, ni como "tilear" un bitmap.

Hasta el momento, esto es lo que hay en el PDF (44 paginas y subiendo), en titulares (lo cual esconde muchas cosas)


Introducción

      -Framebuffers
      -Doble Buffer
      -Buffer Z
      -Stencil Buffer
      -Componentes de color
      -Iniciando el Video en Wii: con código de ejemplo

Introducción a las 3D

      -La proyeccion de graficos en 3D
      -Construcción de objetos
      -Elementos de un vértice (atributos)

Polígonos

      -Tipos de objeto
      -Vértice directo y vértice indexado
           -GX_SetArray
      -El descriptor de vértices
           -GX_ClearVtxDesc
           -GX_SetVtxDesc
      -El descriptor de formato de vértice
           -GX_SetVtxAttrFmt
      -Dibujado de polígonos
           -GX_Begin
           -GX_End
      -Funciones para fijar atributos al vértice
           -Posición     
           -Normal
           -Color
           -Coordenadas de textura
      -Ejemplo de dibujo de polígonos

Vectores y Matrices

      -Matriz de proyección
      -Matriz de vista
      -Matriz Mundial
      -Aplicación de matrices en Wii
      -Configurando la proyección para gráficos 2D
      -Matrices de Normal y de Textura
           -Proyección desde fuente de luz : Capturar y aplicar sombras

Iluminación

      -Luz Ambiental
      -Luz Difusa
      -Luz Especular

Transparencia y Translucidez

      -Activar la translucidez
      -Desactivar  translucidez
      -Activar transparencia
      -Desactivar  transparencia

Texturas
     
      -Envoltura
      -Filtros
      -Texturas formando tiles
           -tiling4x4: función de tileado de texturas
           -ctlut: función de conversión de colores de paleta
      -Cargando una textura en Wii
      -Cargando Texturas con Paleta
      -Capturar Textura Desde el Framebuffer



Funciones de gu.h
     
      -guPerspective
      -guOrtho
      -guLightFrustum
      -guLookAt
      -guVecNormalize
      -guVecCross: calcular la normal a un triángulo
      -guMtxIdentity
      -guMtxConcat
      -guMtxScale
      -guMtxScaleApply
      -guMtxTrans: nota: esta función tiene un bug llamar antes  a guMtxIdentity
      -guMtxTransApply
      -guMtxRotRad
      -guMtxRotAxisRad
      -guMtxInverse
      -guMtxTranspose
      -guMtxCopy




Me faltan cosas como hablar de las luces por hardware y el texture environment y quizá de algunas funciones sueltas del GX que considere oportuno hablar. Pero cómo digo, más importante que saber que recibe una función cómo parámetros, es saber cómo se aplica y para que coño la necesito XD
Espero tu documentación de GX con ganas, yo se un poco de OpenGL gracias a DS, pero sólo 4 chorradas... Lo poco que he visto en los ejemplos de GX se parece mucho, pero ya que te vas a dar el curro de hacer ese pdf pues me lo miraré y aprenderé en condiciones.

Muchas gracias por tu trabajo, Hermes.

PD: En mi página web tienes ejemplos de lo que se hacer (eso sí, no está nada optimizado, uso continuamente floats, divisiones... y tampoco era mi intención optimizarlo). XD
9 respuestas