Frame Rate

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
TersaKen
Messages : 58
Inscription : dim. 05/févr./2006 16:15

Frame Rate

Message par TersaKen »

Bonjour,
J'ai recherché un peu dans l'aide et sur ce forum, je ne trouve pas la commande qui permet de retourner le "Frame Rate" actuel de l'application plein ecran lancée ...
Est ce que quelqu'un peu m'eclairer sur ce sujet ?
Merci d'avance !
En parallele, je voudrais savoir si Pure Basic permet un affichage plutot rapide du traitement pixel par pixel ?
Je compte recreer une fonction " LineXY " pour les besoins d'un " Z buffer ",
Cette fonction fonctionnerait comme cela [ ecrit en db pro, mais le principe reste le même ]
avant de me plonger dans le pure, j'aimerais savoir si cette commande serait assez rapide ( frame rate > 500 ), autrement mon initiation a ce basic ne me sera pas d'une grande utilité :roll:

Code : Tout sélectionner

  
function Line_3D(x1,y1,x2,y2)

`si il s'agit d'une droite parfaitement vertical alors ...
 
 
 if x2 = x1
   if y2 > y1 ; s = y1 ; f = y2 ; else ; s = y2 ; f = y1 ; endif
	  for x = s to f 
	    box x1,x,x1+1,x+1
	   next x 
	   exitfunction 
  endif 

`autrement nous devons trouver l'equation de la droite reliant les points a(x1,y1)
`au point b(x2,y2) ! Pour avoir un rendu correct, il faut evidemment trouver le nombre
`de point necessaire pour avoir une droite sans discontinuité d'affichage
`ce que l'on fait avec la variable Step_# ...  
  
 dx = abs(x2-x1)
 dy = abs(y2-y1)
 d = sqrt( dx^2 + dy^2) 
 Step_#  = dx/(d*1.0)
 
 if x2 > x1
      coeff# = (y2-y1)/(dx*1.0)
      c = y1 ; d = x1	  
 else 	  
     coeff# = (y1-y2)/(dx*1.0)
     c = y2 ; d = x2	  
  endif 
  
   
	  for x# = 0 to dx step Step_#
		   b = coeff#*x#+c 
		   a = x#+d 
		   box a, b,a+1,b+1
	  next x# 
	  
	  
endfunction
[ Pour afficher les aretes des Objets 3d, j'utiliserais cette commande, inutile de dire qu'il y aura beaucoup de Lignes de ce type :oops: ]
D'apres vous ?
Merci d'avance :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Tu vas là , puis dans CodeArchiv , et tu trouveras un code (ou plusieurs ? ) montrant comment calculer le FPS.

http://www.purearea.net/

Sinon je pense que la Commande LineXY() est sûrement plus rapide que ta fonction, faudrait faire des tests pour confirmer :D

Comme je vois que tu fais des Sqrt() , il y a peu de chance que ta fonction gagne .

sinon , il y a la fameuse méthode de Bresenham

http://purebasic.hmt-forum.com/viewtopic.php?t=2703

[EDIT]
Et je viens de comparer LineXY() et ma fonction avec Bresenham, LineXY() est vraiment la plus rapide , comme on pouvait s'en douter :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
TersaKen
Messages : 58
Inscription : dim. 05/févr./2006 16:15

Message par TersaKen »

Le truc ( et voui, et il y a une raison a cette fonction )
c 'est que j'utilise un Z buffer,
j'autorise ou Non l'affichage d'un pixel de la droite composant l'arrete ...
Pour savoir si j'autorise ou non son affichage, j'utilise un tableau de la taille de l'ecran contenant "la profondeur" de chaque pixel ...
si la valeur contenue dans le pixel Y est plus petite ( donc plus proche ) de la valeur du Pixel X alors j'affiche le Pixel Y sur le Pixel X ! Cela permet de gerer sans trop se casser la tete, les " faces cachées " ...
Je vais regarder la methode de BresenHam pour voir si celle ci me convient, qui apparement permet d'afficher sans aucun probleme des droites avec des valeurs en abscisses plutot rapprochés, sans créer de discontinuités ; ce qui s'avere plutot interessant [ le tout sans square root, donc plus rapide :D ]
[ l'utilisation de square root me permet de connaitre le Nombre de pixel a afficher et donc, si une droite passant par a(0,0) et b(1,480), on devra afficher sqrt( 1^2 + 480^2) soit environ 480 pixels... sachant que je n'avance que d'un pixel en abscisse, il faut que le Pas soit egal a 1/480 soit environ 0.002, en utilisant cette methode, je peux creer toutes sortes de droites sans aucun probleme d'affichage ] ... Mais il faut avouer que ma methode n'est pas tres maline, car lente !
Si le tout se trouve etre encore beaucoup trop lent, il faudra que je songe a une autre methode !
en tout cas, merci beaucoup pour ta reponse ;)
Répondre