Karoshi MSX Community
05 de Julio de 2021, 03:45:46 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Sprite clipping  (Leído 7701 veces)
0 Usuarios y 1 Visitante están viendo este tema.
zogo
Karoshi Newbie
*
Mensajes: 4


« : 15 de Mayo de 2008, 06:36:56 am »

Hola a tod@s,

Estoy empenzando en esto del MSX, llevo bastante tiempo desarrollando para el cpc, y los sprites por hardware son una gran ayuda. Una duda que me ha surgido, es como implementar el clipping de sprites. Lo habeis hecho alguna vez, como lo haceis? Redefiniedo el sprite?

S2
En línea
Ramones
Visitante
« Respuesta #1 : 15 de Mayo de 2008, 09:33:51 am »

¿Qué quieres clipear? Es decir, explica un poco qué quieres hacer y como. Pero por tu comentario imagino que querás "pasa por detras" de cosas y temás así.

Realmente el MSX no está muy pensado para hacer ese tipo de cosas sin usar sprites. Es decir, lo más sencillo si son casos muy concretos es usar las prioridades de los planos de sprites. Plano más bajo, mayor prioridad, es decir, si pones algo en el plano 0 y algo en el plano 1, el sprite del plano 1 pasara "por detrás" del plano 0. Es una solución.

La solución de redefinir es posible, si, pero lleva bastante coste, todo depende de lo que quieras implementar. El acceso a la VRAM en MSX es bastante lento.
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #2 : 15 de Mayo de 2008, 10:04:32 am »

Si no recuerdo mal, Ramones, algo vi revoloteando por tu disco duro que aplicaba esta técnica. De hecho, también me suena que por el disco duro de nuestro Viejo Archivero había algunas pruebas para hacer algo así.

En cuanto a "clipping", sólo resulta fácil en los casos en que se pueda utilizar o bien el orden de prioridad de sprites (el número de plano de sprites) o bien la regla del quinto sprite. Para situaciones más complejas, hay que hacer mecanismos de redefinición en caliente de sprites.

O usar sprites por software y repintarlos en cada frame, como se ha resuelto normalmente en todas las conversiones de spectrum. Los ejemplos más notables en este sentido son los juegos tipo Filmation en 3D.
En línea
Ramones
Visitante
« Respuesta #3 : 15 de Mayo de 2008, 10:32:42 am »

Si no recuerdo mal, Ramones, algo vi revoloteando por tu disco duro que aplicaba esta técnica. De hecho, también me suena que por el disco duro de nuestro Viejo Archivero había algunas pruebas para hacer algo así.

En efecto, pruebas eran. Y si, poder se puede hacer. Pero claro, tiene coste.

En cuanto a "clipping", sólo resulta fácil en los casos en que se pueda utilizar o bien el orden de prioridad de sprites (el número de plano de sprites) o bien la regla del quinto sprite. Para situaciones más complejas, hay que hacer mecanismos de redefinición en caliente de sprites.

O usar sprites por software y repintarlos en cada frame, como se ha resuelto normalmente en todas las conversiones de spectrum. Los ejemplos más notables en este sentido son los juegos tipo Filmation en 3D.

Pues si. Y si lo piensas es casi el mismo trabajo  (o más) hacerlo con caracteres que con sprites. Vamos que puestos a redefinir y enmascarar... pues casi que se puede plantear con sprites igual. Todo es ponerse. Wink




En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #4 : 15 de Mayo de 2008, 10:51:32 am »

Mi comentario sobre clipping con sprites por soft viene al hilo de que una vez hechas las rutinas del blitter para estos sprites, lo único que hay que hacer es establecer un orden de redibujado correcto (buffer Z o algoritmo del pintor) para que se dé visualmente el clipping. Por supuesto, es más costoso en cuanto a consumo de CPU que unas rutinas adaptadas ex-profeso.
En línea
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #5 : 15 de Mayo de 2008, 12:07:18 pm »

Pero este chico con lo del clipping no se referirá a que se vea solo un trozo del sprite?
Vamos .. como cuando el personajillo del Athletic Land o el del Penguin Adventure desaparecen por caer en un agujero o en el agua.
No se, me da que entiendo eso por Clipping.
En línea

MSX4EVER2GETHER
www.nerlaska.com
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #6 : 15 de Mayo de 2008, 04:28:18 pm »

Y de eso hemos estado hablando, Nerlaska. Resumiendo: el clipping de sprites por hard en MSX es difícil, salvo haciendo servir superposiciones de sprites o la regla del 5 sprite. Por soft, hay que currárselo algo más. Por hard y con otro tipo de clipping, hay que hacer rutinas muy específicas de redefinición de sprites "en caliente".
En línea
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #7 : 15 de Mayo de 2008, 05:05:28 pm »

Perdona .. jejej .. es que como he visto que mentabais lo de la ordenación y no se que .. pues lo he liado.
Clipeandome a mi mis... POF!

En línea

MSX4EVER2GETHER
www.nerlaska.com
zogo
Karoshi Newbie
*
Mensajes: 4


« Respuesta #8 : 16 de Mayo de 2008, 08:34:41 am »

Muchas gracias por vuestros comentarios. Lo de utilizar la prioridad de los sprites es lo primero que habia pensado. Pero suponia que habria una mejor forma de hacerlo. Supongo que redefinir los sprites es lo mas apropiado. Lo que quiero conseguir es que un sprite salga por un lado de la pantalla y vuelva por el otro.

S2
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #9 : 16 de Mayo de 2008, 09:57:58 am »

¿La pantalla?, ¿te refieres a la pantalla al completo con sus 256x192 píxeles?. Si es así, esa función ya la tienen integrada.

Por la derecha desaparecen sin problemas, un sprite situado en la coordenada 255 queda prácticamente fuera de la pantalla. Por la izquierda no es posible hacerlo únicamente cambiando la coordenada (no podemos meter una coordenada -1, -2, etc.); pero para ello se usa el bit 7 del byte de atributo de color (offset +3) que si está activo a la posición X del sprite se le resta 32, permitiendo que hasta los sprites de 16x16 magnificados queden fuera de la pantalla.

Respecto a los límites superior e inferior,....con el último tampoco habría problemas, con el primero ya no estoy tan seguro, no me acuerdo de que comportamiento tiene un sprite en el borde superior Tongue
En línea

Doom dee doom dee doom
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #10 : 16 de Mayo de 2008, 10:20:42 am »

En vertical no hay ningún problema, salvo que hay que evitar la posición Y=208, que produce la ocultación de todos los planos de sprites siguientes al actual.

Al salir por arriba o abajo lo hace suavemente, por lo que no tendrás problemas.

En cuanto a salir por los laterales, tendrás que usar el bit EC (Early Clock) del que te hablaba JL. El único problema es que entonces las coordenadas del sprites estarán siempre entre -32 y 255, por lo que necesitarás más de un byte para almacenar el valor, salvo que hagas alguna "trampa".
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #11 : 16 de Mayo de 2008, 11:32:22 am »

Ah, es verdad, he hecho una pruebecilla y por el margen superior también desaparecen los sprites Smiley. Utilizando coordenadas de la 254 hacia abajo el sprite puede hacerse desaparecer igualmente.
En línea

Doom dee doom dee doom
zogo
Karoshi Newbie
*
Mensajes: 4


« Respuesta #12 : 16 de Mayo de 2008, 01:35:57 pm »

Y si no es a pantalla completa, pero un marco de unos 192x160?
Gracias otra vez por vuestros consejos.

S2
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #13 : 16 de Mayo de 2008, 01:53:46 pm »

En cuanto a desplazamientos verticales, bastaría con aplicar la regla del 5 sprite, poniendo en las zonas superior e inferior 4 sprites en cada una con números de plano más bajos que los de los sprites a ocultar.

Para los horizontales, tendrás que hacer ocultación con otros sprites, pero supone un coste importante precisamente por la existencia de la regla del 5º sprite. La otra opción es la redefinición de sprites en caliente, pero me parece bastante duro.
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #14 : 16 de Mayo de 2008, 02:24:31 pm »

Si, no queda otra que la de utilizar la redefinición en caliente, muy pesadote; pero si no hay mucho trabajo en pantalla y sobra tiempo se puede emplear en ello. Si la pantalla es estática y los objetos móviles son sprites no habría mucho problema... Smiley

De todas formas replantea el diseño si es necesario, si no vas a hacer pasar los sprites por detrás de decorados y necesitar máscaras (como las que se emplean habitualmente en los sprites por software usados en Spectrum y Amstrad) y sólo vas a definir un marco, extiéndelo horizontalmente a todo lo ancho o por lo menos aprovecha uno de los márgenes reales, no lo centres. Verticalmente haz lo mismo, aprovecha el margen inferior o superior, el que mejor te convenga.

Normalmente yo tengo preferencia por centrar la acción en la parte inferior de la pantalla; así se estira un poco el tiempo que tenemos por fotograma antes de tener que preocuparnos por "flickering" y demás zarandajas.
En línea

Doom dee doom dee doom
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!