Palette de couleur sur vos consoles ? (neogeo)

Voir le sujet précédent Voir le sujet suivant Aller en bas

Palette de couleur sur vos consoles ? (neogeo)

Message par pckid le Sam 26 Sep 2015 - 22:05

Bonjour à tous,

Je suis entrain de developper sur la neogeo un jeu, et cette console manque d'outil, alors je suis entrain de les fabriquer pour mon jeu avec tomna.

Mon problème est la gestion du FixLayer, comme son nom l'indique, c'est un calque fix qui sert aux credit, score, ou autre données fixes.

Seulement, j'ai besoin de gérer les palettes en Asm, et de récupérer en byte les codes couleurs.

Mon outil est en c# sur visual studio, je load mon image et je parcours pixel par pixel pour stocker ma palette dans un tableau. (pas compliqué)

Là ou cela se corse, c'est que je recupere une valeur RGB ou Hexa et j'ai besoin de l'encode en 4 bytes dit  (4bpp) comme la snes pas dans le meme ordre. 

voilà ce que j'ai dans l'aide
https://wiki.neogeodev.org/index.php?title=Palettes
https://wiki.neogeodev.org/index.php?title=Fix_layer
https://wiki.neogeodev.org/index.php?title=Fix_graphics_format


Mon format est :  RGBRRRRGGGGBBBB


j'ai trouvé une info sur le forum de GBA.
http://www.playeradvance.org/forum/archive/index.php/t-3709.html

il code la couleur sur 5 bit. mais au format : xbbbbbgggggrrrrr


((((b)>>3)<<10)+(((g)>>3)<<5)+((r)>>3))





En faisant mes calculs je suis arrivé à çà mais c'est pas bon :


 int nColor =((pixelColor.ToArgb())>>3<<12)+((dRed)>>4<<8)+((dGreen)>>4<<4)+((dBlue)>>4);



Comment vous faites sur megadrive, pcengine, nes, ou autre console pour ceux qui programme.


D'avance merci à vous,
avatar
pckid
Infirmier

Masculin Nombre de messages : 3668
Age : 40
Localisation : ile de france (94)
Date d'inscription : 29/09/2011

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par vingazole le Sam 26 Sep 2015 - 23:56

Plusieurs questions pour pouvoir t'aider :

   - de quelle taille sont tes composantes R V B (dRed, dGreen, dBlue) - j'imagine du 8 bits par composante ?

   - c'est quoi pixelColor.ToArgb() ?

  - as-tu une valeur de Dark bit à ajouter dans ton code palette (le bit n°15 d'après le lien que tu as donné ?
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4011
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par pckid le Dim 27 Sep 2015 - 0:17

Salut vingazole.

Alors oui les couleurs sont en.8bit
Le pixelColor.toArgb est la valeur décimale de la.couleur du pixel.

Et pour le darkbit tu mets 1 la neogeo l utilise et 0 ne l utilise pas.
avatar
pckid
Infirmier

Masculin Nombre de messages : 3668
Age : 40
Localisation : ile de france (94)
Date d'inscription : 29/09/2011

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par vingazole le Dim 27 Sep 2015 - 0:42

Si tu as tes 3 composantes dRed, dGreen et dBlue sur 8 bits, je te propose d'utiliser 3 nouvelles variables représentant les composantes RVB sur 5 bits pour simplifier le calcul de nColor :

Code:
unsigned int nBlue, nGreen, nRed;

nBlue = dBlue >> 3;
nGreen = dGreen >> 3;
nRed = dRed >>3;

nColor = (nBlue >> 1) + (nGreen >> 1) << 4 + (nRed >> 1) << 8 + (nBlue & 1) << 12 + (nGreen & 1) << 13 + (nRed & 1) << 14 + nDarkbit <<15;
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4011
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par pckid le Dim 27 Sep 2015 - 10:41

vingazole a écrit:Si tu as tes 3 composantes dRed, dGreen et dBlue sur 8 bits, je te propose d'utiliser 3 nouvelles variables représentant les composantes RVB sur 5 bits pour simplifier le calcul de nColor :

Code:
unsigned int nBlue, nGreen, nRed;

nBlue = dBlue >> 3;
nGreen = dGreen >> 3;
nRed = dRed >>3;

nColor = (nBlue >> 1) + (nGreen >> 1) << 4 + (nRed >> 1) << 8 + (nBlue & 1) << 12 + (nGreen & 1) << 13 + (nRed & 1) << 14 + nDarkbit <<15;

Merci vingazole,

Ca marche, en comparant avec l'outil FixConv qui sort une palette, mais l'exe est trop limité, je suis entrain de le réécrire.
Comment tu as fait pour comprendre qu'il fallait fait  BGR BRG + DARKBIT dans ton code 
alors que le format attendue : D RGB RRRR GGGG BBBB

ce serait super de comprendre.

vraiment merci,

ps : fabrice me targue d'eloge sur toi, et ce que tu fais en sms, c'est vraiment fort.
avatar
pckid
Infirmier

Masculin Nombre de messages : 3668
Age : 40
Localisation : ile de france (94)
Date d'inscription : 29/09/2011

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par vingazole le Dim 27 Sep 2015 - 15:10

Quand tu dis que le format attendu est D RGB RRRR GGGG BBBB, ce n'est pas assez précis.

Le lien que tu as donné (https://wiki.neogeodev.org/index.php?title=Palettes) est plus explicite :
D R0 G0 B0 R4 R3 R2 R1 G4 G3 G2 G1 B4 B3 B2 B1

D représente le Dark bit, R0..4 G0..4 B0..4 indiquent où placer les bits de différents poids des composantes RGB.

Il suffit alors de placer les différents bits aux bons endroits, je vais t'expliquer pour la composante verte, c'est similaire pour le rouge et le bleu.

Au départ on a :

nGreen = 0 0 0 0 0 0 0 0 0 0 0 G4 G3 G2 G1 G0

On décale de 1 bit vers la droite pour "éliminer" G0 :

nGreen >> 1 = 0 0 0 0 0 0 0 0 0 0 0 0 G4 G3 G2 G1

Et on place G1..4 au bon endroit en décalant de 4 positions vers la gauche :

(nGreen >> 1) << 4 = 0 0 0 0 0 0 0 0 G4 G3 G2 G1 0 0 0 0

Il reste le bit de poids le plus faible (G0) à placer en position 13 :

On isole d'abord ce bit en mettant tous les autres à zéro :
nGreen & 1 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 G0

et on décale de 13 positions vers la gauche pour envoyer G0 à la position voulue :

(nGreen & 1) << 13 = 0 0 G0 0 0 0 0 0 0 0 0 0 0 0 0 0


En additionnant les deux résultats on a bien tous les bits de la composante verte en place :

(nGreen >> 1) << 4 + (nGreen & 1) << 13 = 0 0 G0 0 0 0 0 0 G4 G3 G2 G1 0 0 0 0

ps: merci pour le compliment Embarassed
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4011
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par pckid le Dim 27 Sep 2015 - 15:30

Vingazole,

Un grand merci à toi, j'ai tout compris, c'est nickel. 

finalement, on garde les 5 bits de couleurs, on en perd aucune, alors que je pensais que c'etait codé en 4 bits.

Tu as du faire des outils de fou pour la master system.

encore merci , tu es un bon pédagogue, et cela m'aide beaucoup
avatar
pckid
Infirmier

Masculin Nombre de messages : 3668
Age : 40
Localisation : ile de france (94)
Date d'inscription : 29/09/2011

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par vingazole le Dim 27 Sep 2015 - 15:55

pckid a écrit:finalement, on garde les 5 bits de couleurs, on en perd aucune, alors que je pensais que c'etait codé en 4 bits.
Il faut reconnaître que le format de palette avec le bit de poids le plus faible de chaque composante "envoyé" dans les positions 12, 13, 14 est un peu spécial !
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4011
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par pckid le Dim 27 Sep 2015 - 16:25

Salut Vingazole

dans le nColor en int, j'ai une erreur de conversion ça sort à 0,

tu aurais une idée ?
Code:
        /// D RGB RRRR GGGG BBBB
        /// D R0 G0 B0 R4 R3 R2 R1 G4 G3 G2 G1 B4 B3 B2 B1
        public int GetColorVingazole(Color cPixColor) {
            int nColor = 0;
            int nBlue, nGreen, nRed, nDarkBit;
            nBlue   = cPixColor.B >> 3;
            nGreen  = cPixColor.G >> 3;
            nRed    = cPixColor.R >> 3;
            nDarkBit= 0;

            nColor = (nBlue >> 1) + (nGreen >> 1) << 4 + (nRed >> 1) << 8 + (nBlue & 1) << 12 + (nGreen & 1) << 13 + (nRed & 1) << 14 + nDarkBit <<15;
            return nColor;
        }

j'ai essaye aussi avec l'operateur pour les bytes en c# c'est |

nColor = (nBlue >> 1) | ((nGreen >> 1) << 4) | ((nRed >> 1) << 8) | ((nBlue & 1) << 12) | ((nGreen & 1) << 13) | ((nRed & 1) << 14) | (nDarkBit <<15);

mais la valeur n'est pas bonne.



Sinon j'ai cette function qui vient d'un outil pour la neogeo que j'ai converti

Code:
   public int GetColorFixConv(Color cPixColor) {
            int nColor = 0;
            // Ancien Code          
            //quad.r /= (double)8.2258064516;
          //quad.g /= (double)8.2258064516;
          //quad.b /= (double)8.2258064516;
            Byte dRed     = Convert.ToByte(cPixColor.R / (double)8.2258064516);
            Byte dGreen   = Convert.ToByte(cPixColor.G / (double)8.2258064516);
            Byte dBlue    = Convert.ToByte(cPixColor.B / (double)8.2258064516);

          nColor = ((dRed&1)<<6)|((dGreen&1)<<5)|((dBlue&1)<<4);

          dRed    >>= 1;
          dGreen  >>= 1;
          dBlue   >>= 1;

          nColor |= ((dBlue&15)<<8)|((dGreen&15)<<12)|(dRed&15);

            return nColor;
        }
avatar
pckid
Infirmier

Masculin Nombre de messages : 3668
Age : 40
Localisation : ile de france (94)
Date d'inscription : 29/09/2011

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par vingazole le Dim 27 Sep 2015 - 21:14

Alors d'abord, au temps pour moi, j'aurais dû mettre des parenthèses partout pour que la formule marche avec des additions (sinon on a des problèmes de priorités entre les différents opérateurs) :

nColor = (nBlue >> 1) + ((nGreen >> 1) << 4) + ((nRed >> 1) << 8) + ((nBlue & 1) << 12) + ((nGreen & 1) << 13) + ((nRed & 1) << 14) + (nDarkBit <<15);

mais tu as raison, c'est plus propre d'utiliser le OU bit à bit (opérateur |) :

nColor = (nBlue >> 1) | (nGreen >> 1) << 4 | (nRed >> 1) << 8 | (nBlue & 1) << 12 | (nGreen & 1) << 13 | (nRed & 1) << 14 | nDarkBit <<15;

J'ai vérifié en fixant des valeurs pour nBlue, nGreen et nRed : la formule fonctionne, elle répartit bien les bits de chaque composante selon le schéma D R0 G0 B0 R4 R3 R2 R1 G4 G3 G2 G1 B4 B3 B2 B1.

Si on ne trouve pas les valeurs que tu attends ça peut venir de deux choses :

- soit le schéma de palette qu'on utilise n'est pas le bon (j'ai un doute car la fonction GetColorFixConv que tu donnes semble suivre le schéma G4 G3 G2 G1 B4 B3 B2 B1 0 R0 G0 B0 R4 R3 R2 R1 (sauf erreur de ma part, j'ai tracé ça "à la main"...)).

- soit la manière de convertir les valeurs RGB 8 bits en valeurs 5 bits n'est pas la même que celle que ton outil (FixConv si j'ai bien suivi) utilise.

En effet en faisant cPixColor.B >> 3 on fait une simple division entière par 8; dans la fonction GetColorFixConv on a une "mise à l'échelle" (255/31=8.2258064516...), donnant un résultat plus précis. Néanmoins, les valeurs obtenues par ces méthodes doivent produire des valeurs proches et le résultat à l'écran ne doit pas être très éloigné.


Dernière édition par vingazole le Lun 28 Sep 2015 - 4:50, édité 1 fois (Raison : + au lieu de |)
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4011
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par Kannagi le Dim 27 Sep 2015 - 23:40

bah comme tu as voulu que je réponde , mais vingazole a très bien répondu.

Code:
red   = pixel[i+0]/16; //Rouge

green = pixel[i+1]/16; //Vert

blue  = pixel[i+2]/16; //Bleu
        
couleur = red + (green<<4) + (blue<<8);

C'est le code épurée le seul 'hic' c'est qu'il converti en 4096 couleur mais ça te donne l'idée de l'algo , mais c'est en plus pas très visible a l'oeil nu ces pertes de couleur Wink


Celle qui est plus complète :
Code:
red   = pixel[i+0]/31; //Rouge

        green = pixel[i+1]/31; //Vert

        blue  = pixel[i+2]/31; //Bleu
        
        couleur = (red&0x0F) + ( (green&0x0F) << 4) + ( (blue&0x0F) << 8) + (blue&0x01) << 12 + (greenn&0x01) << 13 + (red&0x01) << 14;

Kannagi
Patient contaminé

Masculin Nombre de messages : 248
Age : 29
Localisation : Marseille
Date d'inscription : 18/08/2014

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par pckid le Lun 28 Sep 2015 - 0:07

Merci Vingazole et Kannagi.

Je verrais demain ton code mais je vois que tu gères pas le Darkbit,

avec HpMan j'ai compris comment gérer le Darkbit, ce qui me permet avec l'algo de vingazole, très proche des valeurs du Buildchar de Hpman.

J'ai hate de voir ton travail Kannagi sur neogeo, car il y a du boulot pour faire un jeu, 
Le fixlayer, le son, le fading, DatLib, et si tu dépasses la taille des eprom, et la gestion des palettes.

Tu fais tout à la mano , ou tu te crées des tools  ?
avatar
pckid
Infirmier

Masculin Nombre de messages : 3668
Age : 40
Localisation : ile de france (94)
Date d'inscription : 29/09/2011

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par Kannagi le Lun 28 Sep 2015 - 1:01

Non je gere pas vraiment le Darkbit (enfin j'ai pas eu le temps de me pencher dessus) m ais disons que visuellement ça me va donc bon :)

pckid a écrit:J'ai hate de voir ton travail Kannagi sur neogeo, car il y a du boulot pour faire un jeu, 
Le fixlayer, le son, le fading, DatLib, et si tu dépasses la taille des eprom, et la gestion des palettes.

Tu fais tout à la mano , ou tu te crées des tools  ?

Bah ça dépend quel jeu je dois faire un beat them all ça peut aller très vite , a vrai dire je suis tres occupé IRL donc j'ai mis ça de coté mais des que j'ai du temps libre je bosserai dessus Wink
Je te l'ai deja dit je fait juste de l'assembleur + outils perso.

De plus la plupart des outils sont pour windows donc je ne les utilise mème pas.

Kannagi
Patient contaminé

Masculin Nombre de messages : 248
Age : 29
Localisation : Marseille
Date d'inscription : 18/08/2014

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par Hpman le Lun 28 Sep 2015 - 1:16

Je renvoie ceux que ça intéresse ici, découvrir les joies du DAC neo geo.

Hpman
Patient contaminé

Masculin Nombre de messages : 128
Age : 40
Localisation : Lille
Date d'inscription : 22/08/2014

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par TOUKO le Lun 28 Sep 2015 - 10:42

Je renvoie ceux que ça intéresse ici, découvrir les joies du DAC neo geo.
Pfff, tout ça pour nous faire lire ça :
My actual project is to develop a side-scrolling shooting game for the Neo-Geo, which is really not an all-new idea but comparatively easy to program - particularly by using HPMAN's amazing DATlib
Quel frimeur ce Hpman  Razz

PS:Intéressant ton lien soit dit en passant .  Wink
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12168
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par pckid le Lun 28 Sep 2015 - 10:58

[HS]
@Touko

Il y a aussi ce projet sur Datlib

http://www.yaronet.com/board/topic/171575#post-16
avatar
pckid
Infirmier

Masculin Nombre de messages : 3668
Age : 40
Localisation : ile de france (94)
Date d'inscription : 29/09/2011

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par TOUKO le Lun 28 Sep 2015 - 11:24

Sympa comme jeu ..
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12168
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: Palette de couleur sur vos consoles ? (neogeo)

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum