Page 1 sur 2

voir la face caché de transformsprite

Publié : dim. 13/oct./2013 19:14
par Thyphoon
Dans les anciennes version de purebasic j'utilisais ce code

Code : Tout sélectionner

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()
afin de pouvoir faire un flipsprite avec la function transformsprite.
(le code permet de voir l'image même si on affiche la face caché)
Je suis très heureux que les fonctions sprites et sprites3D aient fusionné.
Mais mon code ne fonctionne plus.
Quelqu'un sait-il comment faire avec la 5.20 ?
Je cherche encore l'idéal multiOs pour une fonction flipsprite.
Je trouve vraiment dommage qu'arriver en 5.20 alors que les fonctions sprites ont été refaite de ne toujours pas avoir la possibilité d'un simple miroir ni d'un de déplacer les hotspots . Et je ne comprends pas pourquoi.
Si quelqu'un a une idée, elle est la bienvenu.

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 20:10
par blendman
Je plussoie entièrement :).

j'utilisais ce code pour colorer aussi les sprites, faire des miroirs, etc...

Ce serait top si on pouvait faire ça en natif :
- colorer les vertices d'un sprite (là, on peut ajouter un couleur au sprite, ce qui est génial, mais pouvoir colorer les vertex serait top comme on peut le faire avec ce code)
- miroir (H et V)
- changer l'origine du sprite qui est toujours en (0,0) (hotspot)

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 20:17
par Thyphoon
blendman a écrit :Je plussoie entièrement :).

j'utilisais ce code pour colorer aussi les sprites, faire des miroirs, etc...

Ce serait top si on pouvait faire ça en natif :
- colorer les vertices d'un sprite (là, on peut ajouter un couleur au sprite, ce qui est génial, mais pouvoir colorer les vertex serait top comme on peut le faire avec ce code)
- miroir (H et V)
- changer l'origine du sprite qui est toujours en (0,0) (hotspot)
Merci ^_^ je me sens moins seul ! J'aimerais bien comprendre ce qui bloque Fred. si c'est a cause du multiplatforme...
tu fais comment tes flipsprites maintenant ?

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 20:31
par falsam
Si ce n'est pas déja fait, regarde SpriteEngine.pbi d'Eddy sur le forum Anglais.
  • screen layout : View -> Layers -> Sprite
    view functions: Move, Rotate
    layer functions: Hide, Move, Scale, Rotate
    layer options: blend, filter, order, shadow
    sprite functions: Hide, Move, Scale, Rotate, Deform, Skew, Flip
    sprite options: HotSpot per frame, multi-frame animation, color gradient
Lien Forum Anglais : http://www.purebasic.fr/english/viewtop ... 40&t=56507

Testé avec la version 5.20 de Pure basic

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 20:37
par Thyphoon
falsam a écrit :Si ce n'est pas déja fait, regarde SpriteEngine.pbi d'Eddy sur le forum Anglais.
  • screen layout : View -> Layers -> Sprite
    view functions: Move, Rotate
    layer functions: Hide, Move, Scale, Rotate
    layer options: blend, filter, order, shadow
    sprite functions: Hide, Move, Scale, Rotate, Deform, Skew, Flip
    sprite options: HotSpot per frame, multi-frame animation, color gradient
Lien Forum Anglais : http://www.purebasic.fr/english/viewtop ... 40&t=56507

Testé avec la version 5.20 de Pure basic
Merci ! j'avais déjà regardé, mais ce qui me gène c'est que tout est lié alors que j'ai juste besoin du flip.
J'ai déjà mon propre système d'animation et de layer.
et j'ai pas réussi a ressortir juste les commandes dont j'avais besoin.
Je vais replonger dedans ...

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 21:46
par Thyphoon
c'est bon c'est tout bête voilà comment faire
mettre le code suivant une fois après Openscreen et ensuite vous pouvez utiliser transformsprite pour faire un flip ^_^

Code : Tout sélectionner

;Disable Backface Culling
  Define pd3d.IDirect3DDevice9

  EnableASM
  !extrn _PB_Screen_Direct3DDevice
  !MOV dword EAX, [_PB_Screen_Direct3DDevice]
  !MOV dword [v_pd3d],EAX
  DisableASM
  pd3d\SetRenderState(22,1)
  pd3d\SetRenderState(7,0)
helas c'est windows only, si vous avez une solution pour linux et MacOsX je suis preneur ...

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 21:56
par falsam
Tu aurais un tout petit code exemple ?

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 21:59
par Thyphoon
falsam a écrit :Tu aurais un tout petit code exemple ?
oui promis je te fais ça des demain matin, je suis debout depuis 4h00 je vais faire coucouche panier !

Re: voir la face caché de transformsprite

Publié : dim. 13/oct./2013 22:02
par falsam
Ooops !! Bonne nuit :)

Re: voir la face caché de transformsprite

Publié : lun. 14/oct./2013 6:09
par Thyphoon
comme promit voici le code
Appuyer sur espace pour constater le miracle !

Code : Tout sélectionner

InitSprite()
InitKeyboard()
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,WindowWidth(0),WindowHeight(0))


;Disable Backface Culling
;from : http://www.forums.purebasic.com/english/viewtopic.php?f=16&t=43718
Define pd3d.IDirect3DDevice9

EnableASM
!extrn _PB_Screen_Direct3DDevice
!MOV dword EAX, [_PB_Screen_Direct3DDevice]
!MOV dword [v_pd3d],EAX
DisableASM
pd3d\SetRenderState(22,1)
pd3d\SetRenderState(7,0)

;-create sprite
CreateSprite(0,128,128)
StartDrawing(SpriteOutput(0))
Circle(32,32,64,#Red)
Box(64,32,64,32,#Green)
StopDrawing()

Repeat
  Repeat
    Event = WindowEvent()
    
    Select Event
      Case #PB_Event_CloseWindow
        End        
    EndSelect
  Until Event=0
  
  ExamineKeyboard()
  
  ClearScreen(#Black)
  If KeyboardPushed(#PB_Key_Space)
    TransformSprite(0,SpriteWidth(0),0,0,0,0,SpriteHeight(0),SpriteWidth(0),SpriteHeight(0))
   
  Else
    TransformSprite(0,0,0,SpriteWidth(0),0,SpriteWidth(0),SpriteHeight(0),0,SpriteHeight(0))

  EndIf
   DisplaySprite(0,32,32)
  FlipBuffers()
  Delay(1)
ForEver
maintenant j'aimerais bien trouver l'équivalent pour MacOsX/Linux

Re: voir la face caché de transformsprite

Publié : lun. 14/oct./2013 7:57
par Micoute
Bonjour Thypoon et merci pour le partage. Il me semble qu'il y a longtemps que je n'ai pas vu ton pseudo affiché sur ce forum et ça me fait bien plaisir de la revoir, alors chapeau bas et à très bientôt, j'espère !

Re: voir la face caché de transformsprite

Publié : lun. 14/oct./2013 8:02
par Thyphoon
Micoute a écrit :Bonjour Thypoon et merci pour le partage. Il me semble qu'il y a longtemps que je n'ai pas vu ton pseudo affiché sur ce forum et ça me fait bien plaisir de la revoir, alors chapeau bas et à très bientôt, j'espère !
Merci mais le bout de code pour affiché la face caché ne vient pas de moi, je l'ai trouvé sur le forum anglais. j'ai juste supprimé 2 lignes de code. ^_^
Effectivement je viens par vague. Je regarde toujours de loin, mais c'est vrai qu'entre les enfants et mes nombreuses activités je manque de temps.
Actuellement j'ai un peu de temps libre alors j'en profite.

Re: voir la face caché de transformsprite

Publié : lun. 14/oct./2013 8:32
par blendman
Merci pour l'astuce, Typhoon, je vais tester ça ;).
J'aimerais bien comprendre ce qui bloque Fred. si c'est a cause du multiplateforme...
OUi, je pense que le multi-plateforme ne doit pas être évident; Il faudrait voir s'il existe un code disponible pour mac et linux.

Par exemple, ceci n'est fonctionnel que sous DirectX, mais pas en OpenGl ;)

Re: voir la face caché de transformsprite

Publié : lun. 14/oct./2013 9:00
par Thyphoon
blendman a écrit :Merci pour l'astuce, Typhoon, je vais tester ça ;).
De rien pour une fois ou je peu apporté quelques choses d’intéressant. (même si ce n'est pas vraiment de moi)
d'habitude c'est plutôt dans l'autre sens c'est les autres qui m'aide :P
blendman a écrit :
J'aimerais bien comprendre ce qui bloque Fred. si c'est a cause du multiplateforme...
OUi, je pense que le multi-plateforme ne doit pas être évident; Il faudrait voir s'il existe un code disponible pour mac et linux.

Par exemple, ceci n'est fonctionnel que sous DirectX, mais pas en OpenGl ;)
Effectivement, mais c'est quand même une demande qui remonte au tout debut de Purebasic, et je ne crois pas que Fred est prit position.
Que ce soit windows/MacOsX/Linux les cartes graphiques fonctionnent toutes sur le même principe... ça doit bien être possible (je mettrai pas ma même a coupé non plus, n'étant pas un spécialiste...)

D'ailleur ça me donne une idée. Fred devrait mettre un système de bounty. Genre quelqu'un propose une liste d'amélioration pour les sprites. Et ceux qui sont intéressé donne ce qu'il veulent comme argent. 1€, 5€, 20€etc... et lorsque ça devient effectif, le montant de la cagnotte est donné a Fred. Un moyen pour Fred d'augmenté les revenus de Purebasic, car c'est vrai qu'une fois qu'on a acheté une licence, il ne touche plus rien, et de satisfaire les demande de ses clients ... :P Qu'en pensez vous ?

Re: voir la face caché de transformsprite

Publié : lun. 14/oct./2013 9:31
par falsam
Je découvre juste aujourd'hui la fonvtion TransformSprite() et bien que ça ne fasse pas avancer la demande de Thyphoon, j'avais envie d'apporter cette petite contribution ..... just for fun :)

Code : Tout sélectionner

#Sprite0 = 0
#Sprite1 = 1
#Sprite2 = 2
#Sprite3 = 3


If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Ooops ", "Impossible d'intialiser DirectX", 0)
  End
EndIf

Win = OpenWindow(#PB_Any, 0, 0, 800, 600, "Sprite Rotation", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(win), 0, 0, WindowWidth(win), WindowHeight(win))

;Disable Backface Culling
Define pd3d.IDirect3DDevice9

EnableASM
  !extrn _PB_Screen_Direct3DDevice
  !MOV dword EAX, [_PB_Screen_Direct3DDevice]
  !MOV dword [v_pd3d],EAX
DisableASM
pd3d\SetRenderState(22,1)
pd3d\SetRenderState(7,0)

;Define font
fontID=LoadFont(0, "Arial", 22, #PB_Font_Bold|#PB_Font_HighQuality|#PB_Font_Italic)

;Create #Sprite0
CreateSprite(#Sprite0, 200, 65, #PB_Sprite_AlphaBlending)

StartDrawing(SpriteOutput(#Sprite0))

  ;Text
  Box(0, 0, 200, 65, RGB(0, 0, 0))
  DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend)
  DrawingFont(fontID)
  DrawText(20, 10, "PURE BASIC", RGBA(255, 255, 255, 255))
  
  ;Left border
  DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)
  BackColor(RGBA(255, 255, 0, 255))
  GradientColor(0.8, RGBA(255, 0, 0, 50))
  FrontColor(RGBA(200, 70, 10, 255))
  LinearGradient(0, 0, 0, 65)
  Box(0, 0, 16, 65)      
    
  ResetGradientColors()
  BackColor(RGBA(255, 255, 255, 255))
  GradientColor(0.6, RGBA(150, 150, 150, 255))
  FrontColor(RGBA(255, 255, 255, 255))
  LinearGradient(25, 53, 30, 70)
  For i=0 To 8
    Box(20+i*20, 45, 10, 10)
  Next
  
  ;Sprite and border outline
  DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_AlphaBlend)
  FrontColor(RGBA(255, 255, 255, 255))
  Box(0, 0, 200, 65) ;Sprite
  Box(0, 0, 16, 65)  ;Left border 
StopDrawing()

TransparentSpriteColor(#Sprite0, RGB(0, 0, 0))

;three other sprites
CopySprite(#Sprite0, #Sprite1)
CopySprite(#Sprite0, #Sprite2)
CopySprite(#Sprite0, #Sprite3)

Rh = 1
Rv = 1

Repeat
  
  ClearScreen(RGB(0,0,0))
  
  ;#Sprite0 : Horizontal Rotate
  x+Rh
  TransformSprite(#Sprite0, x,0, SpriteWidth(#Sprite0)-x,0, SpriteWidth(#Sprite0)-x,SpriteHeight(#Sprite0), x, SpriteHeight(#Sprite0))     
  
  If x>SpriteWidth(#Sprite0) ;
    Rh=-1
  ElseIf X=0
    Rh=1
  EndIf
  
  ;#Sprite1 : Vertical Rotate
  y+Rv
  TransformSprite(#Sprite1, 0,y, SpriteWidth(#Sprite1),y, SpriteWidth(#Sprite1),SpriteHeight(#Sprite1)-y, 0,SpriteHeight(#Sprite1)-y)     
  
  If y>SpriteHeight(#Sprite1)
    Rv=-1
  ElseIf y=0
    Rv=1
  EndIf
  
  ;#Sprite2 : Vertical Rotate 
  RotateSprite(#Sprite2, 1, #PB_Relative)
  RotateSprite(#Sprite3, 180, #PB_Absolute)

  ;Show sprites
  DisplayTransparentSprite(#Sprite0, 150, 100)    
  DisplayTransparentSprite(#Sprite1, 450, 100)
  DisplayTransparentSprite(#Sprite2, 150, 350)         
  DisplayTransparentSprite(#Sprite3, 450, 350)         
  
  ExamineMouse()
  ExamineKeyboard()
    
  FlipBuffers()

  Until KeyboardPushed(#PB_Key_Escape)
End