transparence et Sprite3D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

transparence et Sprite3D

Message 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 !!
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: transparence et Sprite3D

Message 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 
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: transparence et Sprite3D

Message 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 ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: transparence et Sprite3D

Message 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().
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: transparence et Sprite3D

Message 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...
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre