PureBasic

Forums PureBasic
Nous sommes le Dim 26/Mai/2013 8:25

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: Un exemple pour illustrer le problème du FPS en 3D fenêtré
MessagePosté: Ven 16/Avr/2004 10:17 
Hors ligne

Inscription: Mer 21/Jan/2004 17:48
Messages: 4494
En mettant FullScreen = 1
j'ai un FPS de 60 ( la fréquence de mon écran )
En mettant FullScreen = 0
J'ai un FPS de 450 .
J'ai essayé en mettant SetFrameRate(30) , et j'obtiens bien un FPS De 30 avec FullScreen = 1 , et ça n'a aucun effet avec FullScreen = 0 ( j'ai toujours 450).

Code:
;Mettre cette valeur à 0 pour passer en mode fenêtré
FullScreen = 1

ScreenWidth = GetSystemMetrics_(#sm_cxscreen)
ScreenHeight = GetSystemMetrics_(#sm_cyscreen)
#ScreenDepth = 16


If InitEngine3D() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
   End
ElseIf InitSprite() = 0 Or InitKeyboard() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
   End
EndIf


If FullScreen   
   If OpenScreen( ScreenWidth , ScreenHeight , #ScreenDepth , "Sokoban3D" ) = 0
      MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
      End
   EndIf
Else
   If OpenWindow(0,0,0,ScreenWidth,ScreenHeight,#PB_Window_BorderLess,"Demo3D") = 0
      MessageRequester( "Erreur", "Impossible d'ouvrir la fenêtre")
      End
   EndIf   
   If OpenWindowedScreen( WindowID(0), 0, 0, ScreenWidth , ScreenHeight , 0, 0, 0 ) = 0
      MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
      End
   EndIf
EndIf

;-Declare procedures
Declare.f WrapValue( Angle.f )

Structure Parametres
   AngleX.f
EndStructure

Dim entity.Parametres(5)

;- Variables globales
Global Pas.f

;-Mesh
CreateMesh(0) ; Cube
SetMeshData(0, 0, ?CubePoints       , 16)
SetMeshData(0, 1, ?CubeTriangles    , 12)
SetMeshData(0, 2, ?CubeTextures     , 16)

;- Textures
CreateTexture(2,128,128)
StartDrawing(TextureOutput(2))
  Box(0,0,128,128,RGB(255,255,255))
  Box(2,2,124,124,RGB(0,0,200))
StopDrawing()

CreateTexture(3,128,128)
StartDrawing(TextureOutput(3))
  Box(0,0,128,128,RGB(255,255,255))
  Box(2,2,124,124,RGB(0,200,0))
  For a = 0 To 128 Step 4
   For b = 0 To 128 Step 4
      Circle(a,b,2,RGB(10,150,10))
   Next b
Next a
StopDrawing()

;- Material
For a = 2 To 3
   CreateMaterial(a, TextureID( a ))
Next a

;-Entity
Restore Entitys
For a = 0 To 1
   Read materialID.l : Read Type.l
   Read Longueur.f : Read Hauteur.f : Read Largeur.f
   Read X.f : Read Y.f : Read Z.f
   Read AngleX.f
   CreateEntity(a , MeshID(0) ,MaterialID(materialID))
   ScaleEntity(a , Longueur , Hauteur , Largeur )
   EntityLocate(a,X,Y,Z)
   entity(a)\AngleX = AngleX
   RotateEntity(a,entity(a)\AngleX,0,0)
Next a

;- Camera
CreateCamera(0, 0, 0 , 100 , 100)
CameraLocate(0,0,0,20)
AmbientColor(RGB(255,255,255))

;- Procédures
Procedure.f WrapValue(Angle.f)
   Angle/360
   Angle-Int(Angle)
   If Angle<0
      ProcedureReturn (Angle+1)*360
   Else
      ProcedureReturn Angle*360
   EndIf
EndProcedure

Procedure.f NewXValue( X.f , Angle.f , NbUnite.f )
   ;r utiliser conjointement avec NewZvalue pour calculer une position de <NbUnite> dans la direction <angle>
   Valeur.f = X + Cos( Angle  * 0.0174533) * NbUnite
   ProcedureReturn Valeur
EndProcedure

Procedure.f NewZValue( Z.f , Angle.f , NbUnite.f )
   ;r utiliser conjointement avec NewXvalue pour calculer une position de <NbUnite> dans la direction <angle>
   Valeur.f = Z - Sin( Angle * 0.0174533) * NbUnite
   ProcedureReturn Valeur
EndProcedure

Procedure GestionCamera()
   PosXCamera.f = NewXValue(EntityX(0) , entity(0)\AngleX  + 180 , 65)
   PosYCamera.f = EntityY(0) + 25
   PosZCamera.f = NewZValue(EntityZ(0) , entity(0)\AngleX  + 180 , 65)
   CameraLocate(0 , PosXCamera , PosYCamera , PosZCamera)
   CameraLookAt(0 , EntityX(0) , EntityY(0) , EntityZ(0))
EndProcedure

Procedure AffAide()
   StartDrawing(ScreenOutput())
   Locate(10,10)
   DrawText("Nombre d'images par seconde = " + StrF(Engine3DFrameRate(#PB_Engine3D_Current)))
   StopDrawing()
EndProcedure

;- Boucle principale

Repeat
   
   ClearScreen(0, 0, 0)
   
   If ExamineKeyboard()
     
      If KeyboardPushed(#PB_Key_Left)
         entity(0)\AngleX = WrapValue( entity(0)\AngleX + 1 )
         RotateEntity(0,1 , 0, 0 )
      ElseIf KeyboardPushed(#PB_Key_Right)
         entity(0)\AngleX = WrapValue( entity(0)\AngleX - 1 )
         RotateEntity(0, -1 , 0, 0 )
      EndIf
     
      If KeyboardPushed(#PB_Key_Up)
         Pas = 2
      ElseIf KeyboardPushed(#PB_Key_Down)
         Pas = -2
      Else
         Pas = 0
      EndIf
     
   EndIf
   
   ;Bouge le perso   
   MoveEntity( 0 , Cos( entity(0)\AngleX * 0.0174533) * Pas , 0, -Sin( entity(0)\AngleX * 0.0174533) * Pas )
 
   ; Gestion de la caméra
   GestionCamera()
   
   RenderWorld()
   AffAide()
   FlipBuffers()
   
Until KeyboardPushed(#PB_Key_Escape)


;-Datas du Cube

DataSection
Entitys:
; le perso
Data.l 2,1 ; matérial
Data.f 6,6,6 ; Dimension longueur , hauteur , largeur
Data.f 200,7,200,0 ; positions X,Y,Z et angle
; le sol
Data.l 3,0 ; matérial
Data.f 1000,8,1000 ; Dimension longueur , hauteur , largeur
Data.f 500,0,500,0 ; positions X,Y,Z et angle

CubePoints:
Data.f -0.5,-0.5,-0.5
Data.f -0.5,-0.5,0.5
Data.f 0.5,-0.5,0.5
Data.f 0.5,-0.5,-0.5

Data.f -0.5,0.5,-0.5
Data.f -0.5,0.5,0.5
Data.f 0.5,0.5,0.5
Data.f 0.5,0.5,-0.5

Data.f -0.5,-0.5,-0.5
Data.f -0.5,-0.5,0.5
Data.f 0.5,-0.5,0.5
Data.f 0.5,-0.5,-0.5

Data.f -0.5,0.5,-0.5
Data.f -0.5,0.5,0.5
Data.f 0.5,0.5,0.5
Data.f 0.5,0.5,-0.5

CubeTriangles:
Data.w 0,4,7
Data.w 0,7,3
Data.w 1,5,4
Data.w 1,4,0
Data.w 2,6,5
Data.w 2,5,1
Data.w 3,7,6
Data.w 3,6,2
Data.w 9,8,11
Data.w 9,11,10
Data.w 12,13,14
Data.w 12,14,15

CubeTextures:
Data.f 0,1
Data.f 1,1
Data.f 0,1
Data.f 1,1

Data.f 0,0
Data.f 1,0
Data.f 0,0
Data.f 1,0

Data.f 0,0
Data.f 1,0
Data.f 1,1
Data.f 0,1

Data.f 0,0
Data.f 1,0
Data.f 1,1
Data.f 0,1

EndDataSection


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 25/Avr/2004 22:55 
Hors ligne

Inscription: Mer 21/Jan/2004 17:48
Messages: 4494
En ajoutant un delay(1) juste après flipbuffer() , j'ai un FPS de 64 à la place de 450 en mode fenêtre , c'est déjà mieux comme ça :)

mais ça ne déconne que chez moi ou quoi ?je n'ai pas vu d'autres posts à ce sujet sur le forum anglais . Alors du coup j'ai vérifié la config de ma carte graphique , et elle a bien le paramètre "attendre la synchro verticale" activé.


Code:
   FlipBuffers()
   Delay(1)


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 26/Avr/2004 1:42 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12959
ça fait PAREIL POUR MOI !!

avec une FX57000 ultra !
:)


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 26/Avr/2004 5:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 09/Fév/2004 23:38
Messages: 1328
Localisation: Bordeaux
j'ai en moyene 80 moi avec ma radeon 9600 mais par moment j'ateint les 300 voir plus (quand je suis sur le bord de la "plateforme")

_________________
BGames Site / Forum / Live


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 26/Avr/2004 17:26 
Hors ligne

Inscription: Mer 21/Jan/2004 17:48
Messages: 4494
ok merci pour vos réponses, alors j'arrête de dérégler les paramètres de ma carte graphique, elle n'est pas en cause :)


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye