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)