voir la face caché de transformsprite

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

voir la face caché de transformsprite

Message 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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: voir la face caché de transformsprite

Message 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)
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: voir la face caché de transformsprite

Message 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 ?
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: voir la face caché de transformsprite

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: voir la face caché de transformsprite

Message 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 ...
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: voir la face caché de transformsprite

Message 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 ...
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: voir la face caché de transformsprite

Message par falsam »

Tu aurais un tout petit code exemple ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: voir la face caché de transformsprite

Message 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 !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: voir la face caché de transformsprite

Message par falsam »

Ooops !! Bonne nuit :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: voir la face caché de transformsprite

Message 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
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: voir la face caché de transformsprite

Message 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 !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: voir la face caché de transformsprite

Message 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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: voir la face caché de transformsprite

Message 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 ;)
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: voir la face caché de transformsprite

Message 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 ?
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: voir la face caché de transformsprite

Message 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   
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre