Bonjour,
Je cherche à faire un effet visuel comme dans cette vidéo ou l'on voit le personnage changer en différentes couleurs, et y faire en pure code, juste en utilisant la SDL.
Merci d'avance.
Bonjour,
Je cherche à faire un effet visuel comme dans cette vidéo ou l'on voit le personnage changer en différentes couleurs, et y faire en pure code, juste en utilisant la SDL.
Merci d'avance.
C'est pas très compliqué ,c'est une animation de palette.
c'était assez utilisé à cette époque (surtout que c'était peu coûteux de changer la palette a chaque frame qu'un sprite :p ).
Par exemple Secret of Mana en abuse beaucoup :
Vers 1m30 : Que ça soit l'eau ou la cascade, tout n'est que animation de palette![]()
D'accord.
J'aurai pensé que pour l'eau c'était des sprites.
Donc par exemple si ma palette contient la couleur bleu (0, 0, 255) qui est à la position index 1 et que je veux faire un effet à la prochaine frame je lui dis que je veux que la couleur bleu soit à l'index 2 par exemple et que à l'index 1 on met du rouge (255, 0, 0). C'est ça ?
Bonjour,
La même technique de changement de palette, pour aller encore plus loin:
Généralement, les petits effets d'eaux et de vague, ça peut être soit de l'alternance de deux sprites, ou alors de l'alternance de palette.
En SDL 1.4, il y avait une gestion de la palette. Il semble que ce soit toujours d'actualité : https://wiki.libsdl.org/SDL_SetPaletteColors
Pour le changement de la palette, pour l'eau notamment, il faut faire une palette qui "tourne" :
Vous avez deux ou quatre couleurs dans votre palette. À chaque tick, vous faites en sorte que la couleur 1 devienne la couleur 2, la couleur 2 devienne couleur 3 et ainsi de suite.
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
La SNES c'est 5Ko/frame , ce qui est pas énorme , et le budget était déjà pris par l'update des persos/pnj/ennemi / scrolling et magie , alors pour l'animation du BG fallait quand même y aller mollo
Comme dit LW , il faut juste que la palette tourne , en général on envoie juste l'adresse+x , x par exemple de 0 à 16 (comme sur SNES ), vu que la SNES avait des palettes de 16 couleurs pour les sprites ( faut que la palette soit 2 fois plus grande pour la copie).
Mais il me semble que j'ai déjà vu de l'animation de palette pour des jeux 3D (sur PSP) , donc c'est une technique qui a quand meme perduré longtemps.
Merci pour votre aide, je vais faire quelques testes pour voir ce que ça donne.
Je trouve ça vraiment intéressant.
Je marque en résolu.
faut pas se casser la tête avec la gestion des palettes si c'est pour faire un effet de couleurs surtout pour un effet eau.
Il suffit avec un logiciel de retouche genre Krita sélectionner une zone puis changer le contraste de la zone
cf l'image jointe par exemple
Après dans le code faire un tableau dynamique de std::vector ou de toute ce que vous voudrez une liste..puis avec un pointeur d'image cadre ça permet de faire des animations
Merci pour tes conseils.
J'ai essayé pour modifier la palette dans la boucle mais c'est pas ouf car comment je peux savoir pour faire les échange de couleur pour faire l'arc en ciel comme dans la vidéo.
Sans code , sans plus de détails impossible de répondre.
Mais il faut que toute les palette ont la même taille (donc faut mieux éviter les palette de 256 couleurs :p ).
Pour l'arc en ciel, soit vous vous créez une palette arc-en-ciel. Soit, vous faites une conversion RGB vers HSV, et en HSV, vous modifiez la Hue (H) (sans toucher les autres) et vous reconvertissez tout ça en RGB et vous aurez un arc-en-ciel.
Et du coup, pour l'appliquer, vous pouvez faire en sorte d'appliquer un masque ou similaire, sur le sprite qui fait une opération du style "ajout de couleur" ou multiplication. On peut tester cela avec les calques dans Gimp (ou similaire).
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Oui enfin dans sa vidéo , c'est clairement une palette arc en ciel , et c'est vraiment basique à faire![]()
on peut simplement obtenir la SDL_Surface et jouer sur les pixels aussi c'est une alternative à manipuler les teintes R,G,B.
https://wiki.libsdl.org/SDL_Surface
Partager