Besoin de testeurs pour performances sprite3d
Publié : jeu. 26/mai/2011 21:33
Bonjour,
Puisque les sprite3d affichent deux triangles, je souhaiterai savoir si la performance varie d'une carte 3d à une autre... (ce qui devrait être le cas)
J'ai besoin que vous lanciez ce petit prog et que vous zoomiez avec les fleches avant/arriere.
Donnez moi s'il vous plait votre carte graphique, le FPS affiché et le nombre de tiles affichés au zoom maximum et minimum.
En vous remerciant,
Puisque les sprite3d affichent deux triangles, je souhaiterai savoir si la performance varie d'une carte 3d à une autre... (ce qui devrait être le cas)
J'ai besoin que vous lanciez ce petit prog et que vous zoomiez avec les fleches avant/arriere.
Donnez moi s'il vous plait votre carte graphique, le FPS affiché et le nombre de tiles affichés au zoom maximum et minimum.
En vous remerciant,
Code : Tout sélectionner
If InitSprite() = 0 Or InitKeyboard()=0 Or InitMouse()=0 Or InitSprite3D()=0 Or InitSound()=0:MessageRequester("Error","Error DirectX",0):EndIf
ExamineDesktops()
Sprite3DQuality(#PB_Sprite3D_BilinearFiltering)
;{-structures
Structure carte1
tile.i
*element
X.i
Y.i
EndStructure
Structure ordre_affichage1
X.i
Y.i
EndStructure
Structure sprite1
spritedebase.i
biasX.i
biasY.i
EndStructure
;}
;{- Taille d'origine des tiles
X_Tilesize=64
Y_Tilesize=X_Tilesize/2
taille_tile=128
;}
;{-déclare les variables globales
Global xmax=DesktopWidth(0),ymax=DesktopHeight(0)
Global xscroll,yscroll,Xscrolliso,Yscrolliso
Global nbcaseX=Round(xmax/X_Tilesize,1);nombre de Case en hauteur en diagonal à afficher
Global nbcaseY=Round(ymax/Y_Tilesize,0);nombre de Case en largeur en diagonal à afficher
Global Scroll_X=80,Scroll_Y=80,IsoScroll_X=1,IsoScroll_Y=80,XX,YY
Global Scroll_X=80,Scroll_Y=80,IsoScroll_X=1,IsoScroll_Y=80,XX,YY
Global vitesse_scroll=32,miliscrol_X,miliscrol_Y,zoom_carte=4
;}
;{-déclare les variables "temporaires"
Global T_i,T_j,T_nb,T_DecX=0,T_DecY=0,T_offset=0
;}
;déclare l'aire de jeu
Global Dim carte.carte1(1023,1023)
;déclare le tableau d'ordre d'affichage des tiles
Global Dim ordre_affichage.ordre_affichage1(20000)
;liste des caractéristiques de l'animation des arbres
Global NewList sprite.sprite1()
;ouvre un écran
OpenScreen(xmax,ymax, DesktopDepth(0), "test")
;{-rempli la carte
;rempli de Tiles
For t_i=0 To 1023
For t_j=0 To 1023
carte(t_i,t_j)\tile=Random(2)+1
Next t_j
Next t_i
;initialise les arbres
For t_i=0 To 10000
Repeat
X=Random(1021)+1
Y=Random(1021)+1
AddElement(sprite())
sprite()\spritedebase=150
sprite()\biasX=-30
sprite()\biasY=-108
Until carte(x,y)\element=0
carte(X,Y)\element=@sprite()
Next t_i
;}
;pré-calcul l'ordre d'affichage des tiles à l'écran
Macro ordredaffichage
T_nb=0
ReDim ordre_affichage(60000)
For T_j=nbcaseY To -nbcaseY Step -1
For T_i=nbcaseX To -nbcaseX Step -1
T_nb+1
ordre_affichage(T_nb)\X=-T_j-T_i
ordre_affichage(T_nb)\Y=T_i-T_j
Next T_i
For T_i=nbcaseX To -nbcaseX+1 Step -1
T_nb+1
ordre_affichage(T_nb)\X=-T_j-T_i+1
ordre_affichage(T_nb)\Y=T_i-T_j
Next T_i
Next T_j
ReDim ordre_affichage(T_nb)
EndMacro
ordredaffichage
;{-création des sprites
T_T=100000
For t_j=1 To 3
;sprite de terrain :herbe verte, herbe sèche et terre nue
CreateSprite(t_j,taille_tile,taille_tile,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(t_j))
Box(0,0,taille_tile,taille_tile,RGB(0,0,0))
Box(0,0,taille_tile,taille_tile,RGB(196, 178, 86))
For T_i=1 To T_T
Plot(Random(taille_tile-1),Random(taille_tile-1),RGB(0,200,50))
Plot(Random(taille_tile-1),Random(taille_tile-1),RGB(0,127,0))
Next T_i
T_T/10
StopDrawing()
Next T_j
;sprite arbre
CreateSprite(150,128,128,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(150))
Box(107/2,64/2,42/2,255/2,RGB(1,1,1))
Box(108/2,64/2,40/2,255/2,RGB(173, 103, 82))
Circle(128/2,65/2,66/2,RGB(1,1,1))
Circle(128/2,65/2,64/2,RGB(0,200,0))
Circle(128/2,65/2,30/2,RGB(1,1,1))
Circle(128/2,65/2,28/2,RGB(0,0,0))
StopDrawing()
;sprite de la souris
CreateSprite(129,16,16,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(129))
LineXY(0,0,15,5,RGB(255,255,255))
LineXY(0,0,5,15,RGB(255,255,255))
LineXY(15,5,5,15,RGB(255,255,255))
StopDrawing()
;transforme les sprites carrées en tiles losanges isométriques rapport 1/2
For T_i=1 To 3
CreateSprite3D(T_i,T_i)
TransformSprite3D(T_i,X_Tilesize/2,0,X_Tilesize,Y_Tilesize/2,X_Tilesize/2,Y_Tilesize,0,Y_Tilesize/2)
Next T_i
CreateSprite3D(150,150)
CreateSprite3D(129,129)
;}
;{-lettres en sprites
LoadFont(0,"Arial",13)
For i=32 To 128
CreateSprite(i,32,32,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(i))
DrawingFont(FontID(0))
DrawText(24-(TextWidth(Chr(i))>>1),0,Chr(i))
StopDrawing()
CreateSprite3D(i,i)
Next i
;}
Procedure texte3D(texte.s,x.i,y.i)
majuscule=10
For i=1 To Len(texte)
c.s=Mid(texte,i,1)
If c="i" Or c="l" Or c="I" Or c="j":majuscule=8:EndIf
If c="t" Or c="f" Or c="r" Or c="1":majuscule=9:EndIf
If c="x" Or c="m":majuscule=10:EndIf
If c="W":majuscule=16:EndIf
x+majuscule
DisplaySprite3D(Asc(Mid(texte,i,1)),x,y)
majuscule=10
If Mid(texte,i,1)>="A" And Mid(texte,i,1)<="Z":majuscule=12:EndIf
If c="i" Or c="l" Or c="I" Or c="j":majuscule=7:EndIf
If c="t" Or c="f" Or c="r" Or c="1":majuscule=9:EndIf
If c="x" Or c="m":majuscule=11:EndIf
If c="W":majuscule=16:EndIf
Next i
EndProcedure
Macro changezoom
nbcaseX=Round(xmax/x_tilesize,1);nombre de Case en hauteur en diagonal à afficher
nbcaseY=Round(xmax/y_tilesize,1)
Start3D()
;change la taille des tiles
For T_i=1 To 3
TransformSprite3D(T_i,X_Tilesize/2,0,X_Tilesize,Y_Tilesize/2,X_Tilesize/2,Y_Tilesize,0,Y_Tilesize/2)
Next T_i
;change la taille des arbres
ratiox.f=X_tilesize/64
ratioy.f=y_tilesize/32
ZoomSprite3D(150,128*ratiox,128*ratioy)
Stop3D()
EndMacro
changezoom
;boucle principale
Repeat
FlipBuffers()
ClearScreen(RGB(0,0,0))
Delay(3)
ExamineKeyboard()
ExamineMouse()
XX=MouseX()
YY=MouseY()
;{-scroll+zoom de la carte
;zoomIN
If KeyboardPushed(#PB_Key_Up) And x_tilesize<512
x_tilesize+zoom_carte
y_tilesize=x_tilesize/2
changezoom
ordredaffichage
EndIf
;zoomOut
If KeyboardPushed(#PB_Key_Down) And x_tilesize>32
x_tilesize-zoom_carte
y_tilesize=x_tilesize/2
changezoom
ordredaffichage
EndIf
If XX>xmax-20
If Scroll_X<1023 And Scroll_Y>0
miliscrol_X-vitesse_scroll
If miliscrol_X<=0
Scroll_X+1:Scroll_Y-1
IsoScroll_X+1
miliscrol_X=X_Tilesize
EndIf
EndIf
EndIf
If XX<20
If Scroll_X>0 And Scroll_Y<1023
miliscrol_X+vitesse_scroll
If miliscrol_X>=X_Tilesize
miliscrol_X=0
Scroll_X-1:Scroll_Y+1
IsoScroll_X-1
EndIf
EndIf
EndIf
If YY>ymax-20
If Scroll_X<1023 And Scroll_Y<1023
miliscrol_Y-vitesse_scroll/2
If miliscrol_Y<=0
Scroll_X+1:Scroll_Y+1:IsoScroll_Y+1:miliscrol_Y=Y_Tilesize
EndIf
EndIf
EndIf
If YY<20
If Scroll_X>0 And Scroll_Y>0
miliscrol_Y+vitesse_scroll/2
If miliscrol_Y>=Y_Tilesize
Scroll_X-1:Scroll_Y-1:IsoScroll_Y-1:miliscrol_Y=0
EndIf
EndIf
EndIf
;}
;{-Affichage sprites 3D
If Val(FormatDate("%ss", Date()))=sek
FPS+1
Else
FPS$=Str(FPS)
FPS=0
EndIf
sek=Val(FormatDate("%ss", Date()))
Start3D()
;affichage des tiles
For i=0 To T_nb
sx=Scroll_X+ordre_affichage(i)\X
sy=Scroll_Y+ordre_affichage(i)\Y
;Si dans le tableau de jeu...
If sx>=0 And sy>=0 And sy<=1023 And sx<=1023
T_Cases=carte(sx,sy)\tile
sxx=-sy*(X_Tilesize/2)+ sx*(X_Tilesize/2)-IsoScroll_X*X_Tilesize+xmax/2-X_Tilesize+miliscrol_X
syy=sy*(Y_Tilesize/2) + sx*(Y_Tilesize/2)-IsoScroll_Y*Y_Tilesize+ymax/2-Y_Tilesize-Y_Tilesize/2+miliscrol_Y
;affiche la case de terrain
DisplaySprite3D(T_Cases,sxx,syy)
EndIf
Next i
;affichage des éléments sur les tiles
For i=0 To T_nb
sx=Scroll_X+ordre_affichage(i)\X
sy=Scroll_Y+ordre_affichage(i)\Y
;Si dans le tableau de jeu...
If sx>=0 And sy>=0 And sy<=1023 And sx<=1023
sxx=-sy*(X_Tilesize/2)+ sx*(X_Tilesize/2)-(IsoScroll_X*X_Tilesize)+xmax/2-X_Tilesize+miliscrol_X
syy=sy*(Y_Tilesize/2) + sx*(Y_Tilesize/2)-IsoScroll_Y*Y_Tilesize+ymax/2-Y_Tilesize-Y_Tilesize/2+miliscrol_Y
If carte(sx,sy)\element
;affiche l'élément sur cette case
ChangeCurrentElement(sprite(),carte(sx,sy)\element)
sxx1=sxx+sprite()\biasX*ratiox
syy1=syy+sprite()\biasY*ratioy
DisplaySprite3D(sprite()\spritedebase,sxx1,syy1)
EndIf
EndIf
Next i
;affichage du texte
texte3D("FPS:"+FPS$,1,1)
texte3D("nombre de tiles affiches: "+Str(T_nb),1,15)
;affichage de la souris
DisplaySprite3D(129,XX,YY)
Stop3D()
;}
Until KeyboardPushed(#PB_Key_Escape)