PureBasic
https://www.purebasic.fr/french/

Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen
https://www.purebasic.fr/french/viewtopic.php?f=7&t=9999
Page 1 sur 1

Auteur:  Thyphoon [ Lun 07/Déc/2009 9:05 ]
Sujet du message:  Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Je viens de découvrir je pense un bug, a moins que ça soit moi qui n'utilise pas correctement cette commande

Voici un code
A la ligne 8 :
mettre Prefs\FullScreen=#True pour passer en plein ecran
mettre Prefs\FullScreen=#False pour passer en mode fenêtré

Ligen 94 :
pour activer et désactiver le Sprite3DBlendingMode(5, 7)

Vous remarquerez que ça marche tres bien en mode fenêtre mais pas en plein écran !et qu'apparment c'est le Sprite3DBlendingMode(5, 7) qui pose problème !

voici le code
vous pouvez me confirmer ou pas ?
Merci d'avance
Code:
UsePNGImageDecoder()
Structure Prefs
  FullScreen.b
  ScreenWidth.l
  ScreenHeight.l
EndStructure
Global Prefs.prefs
Prefs\FullScreen=#True ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ici
Prefs\ScreenWidth=800
Prefs\ScreenHeight=600

InitSprite()
InitSprite3D()
InitKeyboard()
   
Select Prefs\FullScreen
   Case #True ; Ouverture en plein ecran
     ExamineDesktops()
      If OpenScreen(Prefs\ScreenWidth,Prefs\ScreenHeight,32,"Test",#PB_Screen_WaitSynchronization, DesktopFrequency(0))
         Debug("Screen is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
         
      Else
         Debug("Error:Can't open Screen with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
         End
      EndIf
   Case #False ; Ouverture dans une Fenêtre
      #W_Screen=0
      If OpenWindow(#W_Screen,0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,"Test",#PB_Window_ScreenCentered) And OpenWindowedScreen(WindowID(#W_Screen),0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,1,0,0)
         Debug("Window is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
      Else
         Debug("Error:Can't open Window with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
         End
      EndIf
EndSelect
     

#Spr_HoleHand=0
    ;LoadSprite(#Spr_HoleHand,"fullhand.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    CreateSprite(#Spr_HoleHand,128,128,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    StartDrawing(SpriteOutput(#Spr_HoleHand))
   
      Circle(64,64,64,#Green)

    For z=1 To 10
      Circle(Random(128),Random(128),Random(10),#Green)
    Next
    StopDrawing()
    CreateSprite3D(#Spr_HoleHand,#Spr_HoleHand)


Structure MyHole
  Rayon.l
  StarAngle.l
  Size.l
  Angle.l
  Alpha.l
EndStructure

Global NewList MyHole.MyHole()

NbStar=38 ;Normalement 40
For z=NbStar To 1 Step -1
  AddElement(MyHole())
  MyHole()\Rayon=Pow(z,1.3)*(Prefs\ScreenWidth/4)/(NbStar*2)
  MyHole()\StarAngle.l=Random(360)
  MyHole()\Size=(NbStar-ListIndex(MyHole()))*128/NbStar
  MyHole()\Angle=(NbStar-ListIndex(MyHole()))*360/NbStar
  MyHole()\Alpha=255-((NbStar-ListIndex(MyHole()))*255/NbStar)
Next

Structure MyHolePrefs
  CordX.l
  CordY.l
  AngleNova.f
  CosAngleNova.f
  SinAngleNova.f
  Coef.l
EndStructure
Global MyHolePrefs.MyHolePrefs

MyHolePrefs\Coef=7
MyHolePrefs\CordX=Prefs\ScreenWidth/2
MyHolePrefs\CordY=Prefs\ScreenHeight/2
;Quelques Précalcule
MyHolePrefs\AngleNova=-15*#PI/180 ;POur un Angle de 15°
MyHolePrefs\CosAngleNova=Cos (MyHolePrefs\AngleNova)
MyHolePrefs\SinAngleNova=Sin (MyHolePrefs\AngleNova)
#BA=#PI
#BB=#PI/2
#BC=#PI+#PI/2

Procedure Spiral()
  t.f=ElapsedMilliseconds()/10000
  Sprite3DBlendingMode(5, 7)  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Et là
  ForEach MyHole()
    AngleStar.f=t+ListIndex(MyHole())/MyHolePrefs\Coef
    Halfrayon=MyHole()\Rayon/2
    x=MyHole()\Rayon*Cos(AngleStar)
    y=Halfrayon*Sin(AngleStar)
    x2=MyHole()\Rayon*Cos(#BA+AngleStar)
    y2=Halfrayon*Sin(#BA+AngleStar)
    x3=MyHole()\Rayon*Cos(#BB+AngleStar)
    y3=Halfrayon*Sin(#BB+AngleStar)
    x4=MyHole()\Rayon*Cos(#BC+AngleStar)
    y4=Halfrayon*Sin(#BC+AngleStar)

  ; ********* voici la formule de la rotation d'image *********
    ;<------------ en degres !!! :o)
   
     x= x * MyHolePrefs\CosAngleNova +( Y)* MyHolePrefs\SinAngleNova
     y=x * MyHolePrefs\SinAngleNova + (Y)* MyHolePrefs\CosAngleNova
               
     x2= x2 * MyHolePrefs\CosAngleNova +( y2)* MyHolePrefs\SinAngleNova
     y2= x2 * MyHolePrefs\SinAngleNova + (y2)* MyHolePrefs\CosAngleNova
                 
     x3= x3 * MyHolePrefs\CosAngleNova +( y3)* MyHolePrefs\SinAngleNova
     y3= x3 * MyHolePrefs\SinAngleNova + (y3)* MyHolePrefs\CosAngleNova
                 
     x4= x4 * MyHolePrefs\CosAngleNova +( Y4)* MyHolePrefs\SinAngleNova
     Y4= x4 * MyHolePrefs\SinAngleNova + (Y4)* MyHolePrefs\CosAngleNova
                 
     ;*****************************************************
    ZoomSprite3D(#Spr_HoleHand,MyHole()\Size,MyHole()\Size)
    RotateSprite3D(#Spr_HoleHand,MyHole()\StarAngle,#PB_Absolute)

    NewSize=MyHole()\Size/2
      NewCordX=MyHolePrefs\CordX+x:NewCordY=MyHolePrefs\CordY+y
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)
      NewCordX=MyHolePrefs\CordX+x2:NewCordY=MyHolePrefs\CordY+y2
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

        NewCordX=MyHolePrefs\CordX+x2:NewCordY=MyHolePrefs\CordY+y2
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

        NewCordX=MyHolePrefs\CordX+x3:NewCordY=MyHolePrefs\CordY+y3
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

        NewCordX=MyHolePrefs\CordX+x4:NewCordY=MyHolePrefs\CordY+y4
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

  Next
EndProcedure
    Repeat
        ExamineKeyboard()
        If Prefs\FullScreen=#False
          Event=WindowEvent()
          Delay(1)
        EndIf
        ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
        Start3D()
        Spiral()
        Stop3D()
       
       
     ;#####
    ;-FPS
    ;#####
    If Second<ElapsedMilliseconds()
      Second = ElapsedMilliseconds() + 1000
      fps = Frame_Counter
      Frame_Counter = 0
    Else
      Frame_Counter + 1
    EndIf
   StartDrawing(ScreenOutput())   

    DrawText(5, 5, "FPS : " + Str(fps),$ffffff)
    ;
  StopDrawing()
       
       
        FlipBuffers():; affiche l'ecran
     

        ;Event=WindowEvent()
         If KeyboardPushed(#PB_Key_Escape)
            End
        EndIf
       
               
    Until Event=#PB_Event_CloseWindow

Auteur:  Thyphoon [ Jeu 10/Déc/2009 12:00 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Ok je met un code plus simple ! Mais j'aimerais avoir un réponse pour savoir si ça me fait ça que chez moi ou chez tout le monde !

Code:
Structure Prefs
  FullScreen.b
  ScreenWidth.l
  ScreenHeight.l
EndStructure
Global Prefs.prefs
Prefs\FullScreen=#True ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Put #False to test in WindowScreen and #True to test in FullScreen
Prefs\ScreenWidth=800
Prefs\ScreenHeight=600

InitSprite()
InitSprite3D()
InitKeyboard()
   
Select Prefs\FullScreen
   Case #True ; Ouverture en plein ecran
     ExamineDesktops()
      If OpenScreen(Prefs\ScreenWidth,Prefs\ScreenHeight,32,"Test",#PB_Screen_WaitSynchronization, DesktopFrequency(0))
         Debug("Screen is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
         
      Else
         Debug("Error:Can't open Screen with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
         End
      EndIf
   Case #False ; Ouverture dans une Fenêtre
      #W_Screen=0
      If OpenWindow(#W_Screen,0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,"Test",#PB_Window_ScreenCentered) And OpenWindowedScreen(WindowID(#W_Screen),0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,1,0,0)
         Debug("Window is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
      Else
         Debug("Error:Can't open Window with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
         End
      EndIf
EndSelect
     
#Spr_HoleHand=0
CreateSprite(#Spr_HoleHand,128,128,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#Spr_HoleHand))
  Circle(64,64,64,#Green)
StopDrawing()
CreateSprite3D(#Spr_HoleHand,#Spr_HoleHand)

Procedure Spiral()
  Sprite3DBlendingMode(5, 7)
  For z=0 To 100
    DisplaySprite3D(#Spr_HoleHand,z,z,128)
Next
EndProcedure
   
Repeat

  ExamineKeyboard()
  If Prefs\FullScreen=#False
    Event=WindowEvent()
    Delay(1)
  EndIf
 
  ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
  Start3D()
  Spiral()
  Stop3D()
       
  FlipBuffers():; affiche l'ecran
     
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
 
Until Event=#PB_Event_CloseWindow

Auteur:  djes [ Jeu 10/Déc/2009 13:35 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Aucun problème ici. J'ai essayé de mettre plus de sprites : pareil, pas de souci.

Auteur:  Thyphoon [ Jeu 10/Déc/2009 14:50 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

djes a écrit:
Aucun problème ici. J'ai essayé de mettre plus de sprites : pareil, pas de souci.

Merci d'avoir essayé
Peut être un problème de carte Graphique alors ....
Sur mon portable la partie des sprites qui se chevauche clignote lorsque j'utilise l'alphablending et une transparence de sprite inférrieur a 255 .. je vais finir part faire une video lolllllllllll :P

Auteur:  Thyphoon [ Jeu 10/Déc/2009 15:25 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Pour ceux qui veulent voir le problème en video , 2 petite video a télécharger
http://9giga.sfr.fr/index.php?m=c9ae77e8&a=dc18f91e&share=LNK30494b21047ea20b2

Auteur:  Geo Trouvpatou [ Mer 16/Déc/2009 16:32 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Salut.

Pour ma part en fenêtré ou plein écran j'obtiens la même chose que ta vidéo : 0839

Bye.

Auteur:  Thyphoon [ Mer 16/Déc/2009 17:27 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Geo Trouvpatou a écrit:
Salut.

Pour ma part en fenêtré ou plein écran j'obtiens la même chose que ta vidéo : 0839

Bye.

merci d'avoir essayé en tout cas ! apparement c'est un problème propre a certaine machine, mais sur tout les ordinateurs que je test ça le fait :o( pourquoi chez moi et pas chez les autres ...

Auteur:  Le Soldat Inconnu [ Jeu 17/Déc/2009 2:25 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

j'ai le même souci que toi :)

Mais m'a carte graphique est vieillotte et n'est surement pas Direct9 compatible (j'ai direct 9 mais la carte n'en supporte surement pas toutes les fonctions)
Est ce la le point clé ?

J'ai essayé en utilisant DirectX 7 en sous-librairie mais je n'ai plus rien qui s'affiche

correction : en supprimant le #PB_Sprite_AlphaBlending dans CreateSprite(#Spr_HoleHand,128,128,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
ça fonctionne en directx 7 (comme sur la vidéo 2)

Auteur:  venom [ Jeu 17/Déc/2009 6:47 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Chez moi en compilant ton code j'ai le meme resultat que ta video 0839

windows xp sp2
nvidia GeForce 8500Gt
directx 9

voilou







@++

Auteur:  Ar-S [ Jeu 17/Déc/2009 12:32 ]
Sujet du message:  Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Je n'ai pas testé tes vidéos, 30 mo c'est trop pour moi (à 64ko/s) (mets les en xvid éventuellement...)
Sinon j'ai testé le 1er code, en plein ecran et fenetré je n'ai pas de clipping des sprites, donc LSI a probablement vu juste avec l'age des Carte Graphique.
La mienne est récente.

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/