Page 2 sur 3
Publié : mar. 05/août/2008 6:20
par Thyphoon
lollllllll désolé de mon ignorance mais c'est quoi les sémaphores ? déjà que j'ai aps compris l'interet des mutexs ...

Publié : mar. 07/avr./2009 18:03
par beauregard
comtois a écrit :une petite question, vous avez testé avec le subsystem dx9 ?
apparemment la structure a changé ?
c'est avec quelques mois de retard que je peux répondre à cette question, dont je comprend maintenant toute l'ampleur de son importance( ma première réponse me fait aujourd'hui un peu honte): oui...
... et çà plante en beauté. Et après avoir gouté au joie de #PB_Sprite_AlphaBlending avec directx9, la joie n'est pas complète.
Publié : mar. 07/avr./2009 18:13
par djes
Publié : mar. 07/avr./2009 18:33
par beauregard
merci djes. Mais avec cette version, il y a une subtilité dans l'utilisation. On dirai qu'il faut définir la taille avec ZoomSprite3D, j'y comprend rien en fait, hum.
par exemple avec une image d'une taille de 1024*32, il faut ZoomSprite3D(#tir,32,32)
çà marche à peu prêt( on voit la couleur 0 quand même, grml)
Avec une image d'une taille de 4096*256, il faut ZoomSprite3D(#tir, 256, 256)
mais là l'image est zoomée comme c'est pas permis. Que faire

Publié : mar. 07/avr./2009 18:38
par djes
Je ne comprends pas ce que tu veux...
Publié : mar. 07/avr./2009 21:52
par beauregard
djes a écrit :Je ne comprends pas ce que tu veux...
ouf, j'ai enfin compris. Je comprend mieux maintenant ce que voulais dire fred
A noter qu'avec le sous-systeme DirectX9, les sprites3D n'ont plus besoin d'etre carrés.
j'ai une image de 4096*128 sur laquelle j'ai stocké les images d'un vaisseau, chacune d'une taille de 96*128. L'erreur, c'est que 4096 n'est pas multiple de 96...
... donc la taille de la grande image doit être de 4032*128 (4032/96=42 donc là çà va).
L'alphablending va me permettre d'embellir mes oeuvres( vaut mieux tard que jamais), et ceux sans trop d'effort

Publié : jeu. 09/avr./2009 17:57
par beauregard
si vous utilisez le clipsprite3D de s.m. avec directx9, alors il est fort possible que la commande plot ne fonctionne plus !
à qui la faute, directx9 ou commande non officielle ? ché pas, mais dans mon cas, la soluce est simple: remplacer plot par box...
Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 11:38
par blendman
salut
je me permets de faire un up de ce sujet, plutôt que d'en recréer un

.
voilà, je recherche 2 fonctions pour les sprite/sprite3D :
- flip/miror : miroir horizontal et/ou vertical)
- color : pouvoir changer la couleur d'un sprite3D (une image png ou jpg pas un sprite fait uniquement de couleur)
J'ai regardé la lib d'Eddy, ainsi que le lib supersprite3D, mais sur la 4.51, les fonctions de mirrorSprite3D() ne marchent plus

.
voici la procedure dans la lib d'Eddy (
http://www.purebasic.fr/english/viewtop ... lit=mirror). j'ai essayé de voir où pouvait être le "bug", mais je n'ai pas trouvé.
Code : Tout sélectionner
ProcedureDLL.b SetSprite3DMirrorMode(Sprite3D, MirrorMode) ;Set 3D sprite mirror mode (returns TRUE if any changes)
Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
Protected MirroringChanges.b=0
Protected IsMirrored.b
Protected DoMirroring.b
IsMirrored=*Sprite3D\Vertice[0]\tu>*Sprite3D\Vertice[1]\tu
DoMirroring=1 And MirrorMode & #MirrorSprite3D_Horizontal
If (DoMirroring And IsMirrored=0) Or (DoMirroring=0 And IsMirrored)
MirroringChanges=1
Swap *Sprite3D\Vertice[0]\tu, *Sprite3D\Vertice[1]\tu
Swap *Sprite3D\Vertice[2]\tu, *Sprite3D\Vertice[3]\tu
EndIf
IsMirrored=*Sprite3D\Vertice[0]\tv>*Sprite3D\Vertice[3]\tv
DoMirroring=1 And MirrorMode & #MirrorSprite3D_Vertical
If (DoMirroring And IsMirrored=0) Or (DoMirroring=0 And IsMirrored)
MirroringChanges=1
Swap *Sprite3D\Vertice[0]\tv, *Sprite3D\Vertice[3]\tv
Swap *Sprite3D\Vertice[1]\tv, *Sprite3D\Vertice[2]\tv
EndIf
ProcedureReturn MirroringChanges
EndProcedure
J'ai bien essayé avec transformSprite3D(), mais mais je n'y arrive pas bien, et je trouve que c'est assez galère à utiliser
Quel dommage qu'on ne puisse pas utiliser le zoomSprite3D avec des valeurs négatives, ce serait tellement plus simple !
Connaissez-vous une technique pour faire un miroir d'un sprite ou de changer sa couleur ?
Merci.
EDIT : j'ai trouvé cette lib :
http://www.purearea.net/pb/download/userlibs/Effect.zip
Mais lorsque je tente de l'utiliser, j'ai le message suivant :
missing memory extension.
Visiblement, si j'ai bien compris, cela signifie que cette lib n'es tplus compatible avec PB 4.51, c'est ça ?
Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 12:07
par Thyphoon
ça fait quelques temps que je n'ai plus trop le temps de jouer avec purebasic
mais voici un fichier d'un jeu que j'avais commencé, c'est celui qui concerne les graphiques.
désolé c'est un peu brut de pomme !!;)
Tu as une fonction pour faire un flip d'un sprite, mais pour que ça marche il faut activer la transparence de la face caché du sprite sinon ça ne marche pas ...
donc function InitFlipEx(), et FlipEx()
tout est dedans
Code : Tout sélectionner
;****************************************************************
; Program: Dark Cauldron
; Author: Thyphoon (Yann LEBRUN)
; Date: Mercredi 29 Juillet
; Version: V0.1
;****************************************************************
CompilerSelect #PB_Compiler_OS
CompilerCase#PB_OS_Windows
;#################################################################
;- Windows
;#################################################################
Macro CreateSpriteEx(idspriteA, idspriteB)
CreateSprite3D(idspriteA, idspriteB)
EndMacro
Macro DisplaySpriteEx(idsprite,x, y , Transparence)
DisplaySprite3D(idsprite, x, y , Transparence)
EndMacro
Macro ZoomSpriteEx(idsprite, width, height)
ZoomSprite3D(idsprite, width, height)
EndMacro
CompilerIf Subsystem("Directx9")
Structure D3DTLVERTEX
x.f
y.f
z.f
rhw.f
Color.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
TexRes.l ; TexRes
Vertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
TmpVertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
Width.l ; width set with ZoomSprite3D()
Height.l ; height set with ZoomSprite3D()
RealWidth.l
RealHeight.l
Angle.f
Transformed.l
EndStructure
CompilerElse ;Directx7
;Thanks Cpl.Bator !!!
Structure vertex
sx.f
sy.f
sz.f
rhw.f
Color.l
specular.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
Texture.l
Vertice.vertex[4]
Width.w
Height.w
EndStructure
CompilerEndIf
Macro RGBA(r,g,b,a)
a << 24 + b << 16 +g << 8 + r
EndMacro
Procedure SetSpriteLuminosityEx(spriteid.l,lum.c)
Protected RGB_LUM.l,*S.PB_Sprite3D
;doit être dans un Start3D
; 255 = Pleine luminosité 0 = noir
RGB_LUM = RGBA(Lum,Lum,Lum,255)
*S=IsSprite3D(spriteid)
*S\Vertice[0]\Color = RGB_LUM
*S\Vertice[1]\Color = RGB_LUM
*S\Vertice[3]\Color = RGB_LUM
*S\Vertice[2]\Color = RGB_LUM
EndProcedure
;Cette commande n'est pas encore utilisé mais servira pour le personnage
;Afin d'éviter d'avoir des spirtes en double pour les directions droites Gauche
;Doit être executer une fois apres un openscreen
Macro InitFlipEx()
CompilerIf Subsystem("Directx9")
Global D3Ddevice_interface9.IDirect3DDevice9
Start3D()
!extrn _PB_Screen_Direct3DDevice
!MOV dword EAX, [_PB_Screen_Direct3DDevice]
!MOV dword [v_D3Ddevice_interface9],EAX
D3Ddevice_interface9\SetRenderState(22,1)
Stop3D()
CompilerElse ;Directx7
Global D3Ddevice_interface7.IDirect3DDevice7
Start3D()
!extrn _PB_Direct3D_Device
!MOV dword EAX, [_PB_Direct3D_Device]
!MOV dword [v_D3Ddevice_interface7],EAX
D3Ddevice_interface7\SetRenderState(22,1) ;(D3DRENDERSTATE_CULLMODE,D3DCULL_NONE)
Stop3D()
CompilerEndIf
EndMacro
Macro FlipSpriteEx(idsprite,flip)
Select flip
Case 1 ;Flip Horizontal
TransformSprite3D(idsprite, SpriteWidth(idsprite), 0, 0, 0, 0, SpriteHeight(idsprite), SpriteWidth(idsprite), SpriteHeight(idsprite))
Case 2 ;Flip vertical
Default:
TransformSprite3D(idsprite, 0, 0, SpriteWidth(idsprite), 0, SpriteWidth(idsprite), SpriteHeight(idsprite), 0, SpriteHeight(idsprite))
EndSelect
EndMacro
InitFlipEx()
CompilerCase #PB_OS_Linux
;#################################################################
;- Linux
;#################################################################
Macro DisplaySpriteEx(idsprite,x, y , Transparence)
DisplaySprite3D(idsprite, x, y , Transparence)
EndMacro
Macro SetSpriteLuminosityEx(spriteid,lum)
EndMacro
CompilerCase #PB_OS_MacOS
;#################################################################
;- MacOS
;#################################################################
CompilerEndSelect
Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 13:50
par blendman
Thyphoon a écrit :Tu as une fonction pour faire un flip d'un sprite, mais pour que ça marche il faut activer la transparence de la face caché du sprite sinon ça ne marche pas ...
c'est ça que je cherche, comment activer la transparence de la face caché du sprite ?
je n'ai pas trouvé dans ton code, et il n'y a rien dans l'aide pour ça.
EDIT ok, visiblement, c'est cette ligne :
Global D3Ddevice_interface9.IDirect3DDevice9
Start3D()
!extrn _PB_Screen_Direct3DDevice
!MOV dword EAX, [_PB_Screen_Direct3DDevice]
!MOV dword [v_D3Ddevice_interface9],EAX
D3Ddevice_interface9\SetRenderState(22,1)
Stop3D()
Et c'est cool, ça marche nickel
merci.
Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 14:36
par Thyphoon
blendman a écrit :
Et c'est cool, ça marche nickel
merci.
Content d'avoir pu t'aider !

Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 15:32
par blendman
Thyphoon a écrit :blendman a écrit :
Et c'est cool, ça marche nickel
merci.
Content d'avoir pu t'aider !

Par contre, j'ai remarqué que si j'utilise le même sprite3D sur plusieurs "objets" (par exemple sur mes arbres) et que j'effectue une transformation sur le sprite3D d'un arbre, ça effectue cette transformation sur tous les "objets" arbres.
Cela signifie que je dois créer autant de sprite3D que j'ai d'objets arbre et ensuite assigner à chaque arbre le bon sprite3D modifié j'imagine.
Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 15:59
par Thyphoon
Le flip est tout a fait négligeable en temps GPU !
donc tu peux l'initialisé avant chaque affichage du sprite.
Moi pour mes animations dans un tableau j'ai le numero du sprite et a côté l'info pour savoir si il est renversé ou pas !
Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 16:28
par blendman
Thyphoon a écrit :Le flip est tout a fait négligeable en temps GPU !
donc tu peux l'initialisé avant chaque affichage du sprite.
Moi pour mes animations dans un tableau j'ai le numero du sprite et a côté l'info pour savoir si il est renversé ou pas !
et tu crées autant de sprite3d que tu as d'objets c'est bien ça ?
D'ailleurs, il ya visiblement une erreur dans la doc ou dans l'ide :
c'est TransformSprite3D(#Sprite3D,...) ou TransformSprite3D(#Sprite,...)
car ce n'est pas la même chose qui est donnée dans l'aide ou dans l'ide

.
Re: Améliorations sprite3d : clip, color, alpha, mirror
Publié : dim. 13/mars/2011 17:01
par Thyphoon
je t'avouerais que ça fait quelques temps que j'ai pas touché purebasic...
Dans mes jeux je n'ai aucun duplication de sprite
je fais des tableaux pour les animations qui contiennent le numéro du sprite, le zoom, le miroir, un Delta en X et un Delta en Y si besoin et je me base sur ces tableaux pour afficher une animation.