Page 1 sur 1

Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : lun. 07/déc./2009 9:05
par Thyphoon
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 : Tout sélectionner

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

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : jeu. 10/déc./2009 12:00
par Thyphoon
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 : Tout sélectionner

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

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : jeu. 10/déc./2009 13:35
par djes
Aucun problème ici. J'ai essayé de mettre plus de sprites : pareil, pas de souci.

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : jeu. 10/déc./2009 14:50
par Thyphoon
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

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : jeu. 10/déc./2009 15:25
par Thyphoon
Pour ceux qui veulent voir le problème en video , 2 petite video a télécharger
http://9giga.sfr.fr/index.php?m=c9ae77e ... 1047ea20b2

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : mer. 16/déc./2009 16:32
par Geo Trouvpatou
Salut.

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

Bye.

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : mer. 16/déc./2009 17:27
par Thyphoon
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 ...

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : jeu. 17/déc./2009 2:25
par Le Soldat Inconnu
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)

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : jeu. 17/déc./2009 6:47
par venom
Chez moi en compilant ton code j'ai le meme resultat que ta video 0839

windows xp sp2
nvidia GeForce 8500Gt
directx 9

voilou







@++

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Publié : jeu. 17/déc./2009 12:32
par Ar-S
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.