Page 1 sur 1

transparence et Sprite3D

Publié : mar. 14/août/2012 22:39
par graph100
Salut les gens,

Je suis désolé, je crois que je vais poser une question qui l'a déjà été, mais comme je ne suis pas une lumière avec les sprites3D, je préfère m'en assurer.

Donc, je suis en train de faire un dessin avec de la programmation, et j'aimerais ensuite pouvoir jouer avec, essayer de faire des effets, etc... un peu comme une intro d'un logo de jeu.
Et pour ce faire, je dessine sur des images transparentes que je dessine sur un sprite, et je voudrais utiliser un sprite 3d ensuite.

D'après ce que j'ai trouvé sur le forum, pour obtenir un sprite 3D avec de la transparence, il est obligatoire d'enregistrer une image transparente sur le disque, puis de la charger avec loadsprite().
Je trouve ça assez ridicule quand on voit ce que PureBasic fait à coté. Si la fonction loadsprite() met de la transparence, pourquoi ne pourrais t’ont pas dessiner en transparent dessus ?

Pour le moment je vais tenter le catchsprite() pour essayer de ne pas passer par le disque. (<- edit : c'est vraiment débile ;) -> poubelle cette idée)
Si vous avez une meilleur idée, je suis tout oreilles !!

Re: transparence et Sprite3D

Publié : mer. 15/août/2012 9:51
par Atlante
graph100 a écrit :Salut les gens,

Je suis désolé, je crois que je vais poser une question qui l'a déjà été, mais comme je ne suis pas une lumière avec les sprites3D, je préfère m'en assurer.

Donc, je suis en train de faire un dessin avec de la programmation, et j'aimerais ensuite pouvoir jouer avec, essayer de faire des effets, etc... un peu comme une intro d'un logo de jeu.
Et pour ce faire, je dessine sur des images transparentes que je dessine sur un sprite, et je voudrais utiliser un sprite 3d ensuite.

D'après ce que j'ai trouvé sur le forum, pour obtenir un sprite 3D avec de la transparence, il est obligatoire d'enregistrer une image transparente sur le disque, puis de la charger avec loadsprite().
Je trouve ça assez ridicule quand on voit ce que PureBasic fait à coté. Si la fonction loadsprite() met de la transparence, pourquoi ne pourrais t’ont pas dessiner en transparent dessus ?

Pour le moment je vais tenter le catchsprite() pour essayer de ne pas passer par le disque. (<- edit : c'est vraiment débile ;) -> poubelle cette idée)
Si vous avez une meilleur idée, je suis tout oreilles !!

Code : Tout sélectionner

Syntaxe

DisplaySprite3D(#Sprite3D, x, y [, Transparence])
Description

Affiche le sprite 3D spécifié à la position de coordonnées (x,y). Un paramètre de transparence est utilisé et peut prendre une valeur de la plage 0 à 255. 0 signifie invisible et 255 opaque. Toute valeur de cette plage 

Re: transparence et Sprite3D

Publié : mer. 15/août/2012 14:50
par graph100
oui je suis d'accord, mais ça c'est pour afficher un sprite tout entier en transparence.
Ce que je voudrais faire c'est dessiner un "trou" dans un srpite, et que ça affiche en tenant compte du canal alpha.

en gros il faut utiliser la commande suivante :

Code : Tout sélectionner

	Sprite3DBlendingMode(5, 6)
Le problème de cette solution est qu'il n'est pas possible (apparemment) de dessiner sur le canal alpha d'un sprite.
Il faut passer par une image puis l'enregistrer sur le disque et la charger avec un loadsprite()
C'est ce que j'ai compris de ce que j'ai lu du forum.

Ma question c'est : n'y a-t'il pas d'autre solution ?

Re: transparence et Sprite3D

Publié : jeu. 16/août/2012 12:26
par blendman
Tu pourrais préciser exactement ce que tu veux faire ?
Pour un dessin, tu peux utiliser une image (createimage()/loadimage()) ou mieux un canvas, mais tout dépend de ce que tu souhaites réaliser.

Sinon tu peux utiliser le canal alpha d'un sprite, avec un sprite3D() et LoadSprite(0,file$,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending).
Tu peux aussi enregistrer tes résultats dans la mémoire plutôt que sur le disque dur (catchsprite() ou catchimage().

Re: transparence et Sprite3D

Publié : ven. 17/août/2012 20:46
par graph100
ce que je veux faire est assez simple :
dessiner un truc avec un canal alpha, puis utiliser le dessin qui viens d’être fait par le programme, pour faire un effet à l'écran.

j'ai bien pensé l'enregistrer en mémoire comme tu le dis, mais il y a un soucis de taille ;)
bien que nous puissions charger une image à partir de la mémoire, il n'y a pas de commande qui enregistre en mémoire et au format png.
Je n'ai pas essayé de faire un catchsprite() sur une image créée par un createimage(), je ne sais pas trop comment récupérer l'adresse mémoire de l'image.

en gros je fait un truc du genre :

Code : Tout sélectionner

SaveImage(image_sp, "test_1.png", #PB_ImagePlugin_PNG)

sprite = LoadSprite(#PB_Any, "test_1.png", #PB_Sprite_Texture | #PB_Sprite_AlphaBlending)

DeleteFile("test_1.png")

sprite3d = CreateSprite3D(#PB_Any, sprite)
Je trouve ça moche...