Algo Black Hole Spiral
Re: Algo Black Hole Spiral
Très jolie ! (a compiler avec Directx9) !
Re: Algo Black Hole Spiral
"Space: The final frontier
These are the voyages of the Starship, Enterprise
Its 5 year mission
To explore strange new worlds
To seek out new life and new civilizations
To boldly go where no man has gone before"

Re: Algo Black Hole Spiral
PS:(En passant le dernier film StartTreck est vraiment très bien)
J'en profite pour mettre ma dernière version du code a compilé avec Directx9
le seul truc qui est domage c'est qu'en fonction de la résolution de la fenêtre le rendu est assez différent ! or j'aurais aimé que si l'ecran en 320x200 ou en 1024x768 que le rendu soit similaire ... mais bon
N'oublier pas de récupérer les images dans les posts précedents !
J'en profite pour mettre ma dernière version du code a compilé avec Directx9
le seul truc qui est domage c'est qu'en fonction de la résolution de la fenêtre le rendu est assez différent ! or j'aurais aimé que si l'ecran en 320x200 ou en 1024x768 que le rendu soit similaire ... mais bon
N'oublier pas de récupérer les images dans les posts précedents !
Code : Tout sélectionner
UsePNGImageDecoder()
#dobro=1
#Police=1
#sprite=1
; ***********************************
InitSprite()
InitSprite3D()
InitKeyboard()
FontID = LoadFont(#Police, "arial", 50, #PB_Font_Bold )
EcranX = 800:;=largeur de l'ecran
EcranY = 600:;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, EcranX, EcranY, "hello", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
Structure Prefs
ScreenWidth.l
ScreenHeight.l
EndStructure
Global Prefs.prefs
Prefs\ScreenWidth=EcranX
Prefs\Screenheight=EcranY
CompilerIf Subsystem("Directx9")
Structure D3DTLVERTEX
x.f
y.f
z.f
rhw.f
Color.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
TexRes.l ; TexRes
Vertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
TmpVertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
Width.l ; width set with ZoomSprite3D()
Height.l ; height set with ZoomSprite3D()
RealWidth.l
RealHeight.l
Angle.f
Transformed.l
EndStructure
CompilerElse ;Directx7
;Thanks Cpl.Bator !!!
Structure vertex
sx.f
sy.f
sz.f
rhw.f
Color.l
specular.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
Texture.l
Vertice.vertex[4]
Width.w
Height.w
EndStructure
CompilerEndIf
Procedure SetSpriteLuminosityEx(spriteid.l,lum.c)
Protected RGB_LUM.l,*S.PB_Sprite3D
;doit être dans un Start3D
; 255 = Pleine luminosité 0 = noir
RGB_LUM = RGBA(255,Lum,255-(Lum/2),Lum)
*S=IsSprite3D(spriteid)
*S\Vertice[0]\Color = RGB_LUM
*S\Vertice[1]\Color = RGB_LUM
*S\Vertice[3]\Color = RGB_LUM
*S\Vertice[2]\Color = RGB_LUM
EndProcedure
LoadSprite(20,"Gfx/holehand.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
CreateSprite3D(20,20)
LoadSprite(21,"Gfx/sun.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
CreateSprite3D(21,21)
LoadSprite(22,"Gfx/star.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
CreateSprite3D(22,22)
Structure MyHole
Rayon.l
StarAngle.l
EndStructure
Global NewList MyHole.MyHole()
NbStar=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)
Next
Procedure Spiral()
degres=-15
Coef=7
t.f=ElapsedMilliseconds()/10000
CordX=Prefs\ScreenWidth/2
CordY=Prefs\ScreenHeight/2
AngleNova.f=degres*#PI/180
BA.f=#PI
BB.f=#PI/2
BC.f=#PI+#PI/2
ForEach MyHole()
AngleStar.f=t+ListIndex(MyHole())/Coef
x=MyHole()\Rayon*Cos(AngleStar)
y=MyHole()\Rayon/2*Sin(AngleStar)
x2=MyHole()\Rayon*Cos(BA+AngleStar)
y2=MyHole()\Rayon/2*Sin(BA+AngleStar)
x3=MyHole()\Rayon*Cos(BB+AngleStar)
y3=MyHole()\Rayon/2*Sin(BB+AngleStar)
x4=MyHole()\Rayon*Cos(BC+AngleStar)
y4=MyHole()\Rayon/2*Sin(BC+AngleStar)
; ********* voici la formule de la rotation d'image *********
;<------------ en degres !!! :o)
x= x * Cos (AngleNova) +( Y)* Sin (AngleNova)
Y=x * Sin (AngleNova) + (Y)* Cos (AngleNova)
x2= x2 * Cos (AngleNova) +( y2)* Sin (AngleNova)
y2= x2 * Sin (AngleNova) + (y2)* Cos (AngleNova)
x3= x3 * Cos (AngleNova) +( y3)* Sin (AngleNova)
y3= x3 * Sin (AngleNova) + (y3)* Cos (AngleNova)
x4= x4 * Cos (AngleNova) +( Y4)* Sin (AngleNova)
Y4= x4 * Sin (AngleNova) + (Y4)* Cos (AngleNova)
;*****************************************************
size=(ListSize(MyHole())-ListIndex(MyHole()))*128/ListSize(MyHole())
Angle=(ListSize(MyHole())-ListIndex(MyHole()))*360/ListSize(MyHole())
Alpha=255-((ListSize(MyHole())-ListIndex(MyHole()))*255/ListSize(MyHole()))
ZoomSprite3D(20,size,size)
ZoomSprite3D(22,size,size)
RotateSprite3D(22,MyHole()\StarAngle,#PB_Absolute)
RotateSprite3D(20,Angle,#PB_Absolute)
SetSpriteLuminosityEx(20,Alpha)
Sprite3DBlendingMode(5, 7)
DisplaySprite3D(20,CordX+x-Size/2,CordY+y-Size/2,Alpha)
DisplaySprite3D(22,CordX+x-Size/2,CordY+y-Size/2,Alpha)
DisplaySprite3D(20,CordX+x2-Size/2,CordY+y2-Size/2,Alpha)
DisplaySprite3D(22,CordX+x2-Size/2,CordY+y2-Size/2,Alpha)
DisplaySprite3D(20,CordX+x3-Size/2,CordY+y3-Size/2,Alpha)
DisplaySprite3D(22,CordX+x3-Size/2,CordY+y3-Size/2,Alpha)
DisplaySprite3D(20,CordX+x4-Size/2,CordY+y4-Size/2,Alpha)
DisplaySprite3D(22,CordX+x4-Size/2,CordY+y4-Size/2,Alpha)
Next
ZoomSprite3D(21,32,32)
DisplaySprite3D(21,CordX-16,CordY-16,200)
EndProcedure
Repeat
ExamineKeyboard()
Event=WindowEvent()
Delay(1)
ClearScreen(RGB(0,0,0)) ; *****<------- si tu Rem ceci le sprite laisse une trace :D
Start3D()
Spiral()
Stop3D()
FlipBuffers():; affiche l'ecran
Event=WindowEvent()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
If KeyboardReleased(#PB_Key_Down) And degres>-45
degres=degres-1
EndIf
If KeyboardReleased(#PB_Key_Up) And degres<50
degres=degres+1
EndIf
Until Event=#PB_Event_CloseWindow
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Re: Algo Black Hole Spiral
Et le tit screen pour les linuxiens
?

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Re: Algo Black Hole Spiral
Bravo les gars, thyphoon ta dernière est très jolie
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Algo Black Hole Spiral
Merci ! Le travail collaboratif du forum fait des merveilles !Ar-S a écrit :Bravo les gars, thyphoon ta dernière est très jolie

- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Re: Algo Black Hole Spiral
Sublime comme d'habitude !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Re: Algo Black Hole Spiral
En bidouillant un peut on peut arriver a des trucs sympa :

Code : Tout sélectionner
; 3D-Stars (V. Schmid)
Structure Stars
x3.f
y3.f
z3.f
x2.f
y2.f
range.f
Spr.l
Type.b
Size.l
EndStructure
MAX_STARS.l = 2500
;Dim Stars.Stars(4, MAX_STARS)
NewList Stars.Stars()
Dim Proj.l(3)
Dim Camera.f(3)
;
Global Counter.f
InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()
Procedure.b ColorSprite3D(Sprite3D.l, Color1.l, Alpha1.b = 255, Color2.l = -1, Alpha2.b = -1, Color3.l = -1, Alpha3.b = -1, Color4.l = -1, Alpha4.b = -1)
*Spr3D = IsSprite3D(Sprite3D)
If *Spr3D = 0
ProcedureReturn 0
EndIf
If Color2 = -1 : Color2 = Color1 : EndIf
If Color3 = -1 : Color3 = Color1 : EndIf
If Color4 = -1 : Color4 = Color1 : EndIf
If Alpha2 = -1 : Alpha2 = Alpha1 : EndIf
If Alpha4 = -1 : Alpha3 = Alpha1 : EndIf
If Alpha3 = -1 : Alpha4 = Alpha1 : EndIf
B1 = Red(Color1) : G1 = Green(Color1) : R1 = Blue(Color1) : A1 = Alpha1
B2 = Red(Color2) : G2 = Green(Color2) : R2 = Blue(Color2) : A2 = Alpha2
B3 = Red(Color3) : G3 = Green(Color3) : R3 = Blue(Color3) : A3 = Alpha3
B4 = Red(Color4) : G4 = Green(Color4) : R4 = Blue(Color4) : A4 = Alpha4
; Merci Ombres du forum FR
PokeB(*Spr3D + 20, R1) ;Couleur jaune vertex 1
PokeB(*Spr3D + 21, G1) ;Couleur rose vertex 1
PokeB(*Spr3D + 22, B1) ;Couleur cyan vertex 1
PokeB(*Spr3D + 23, A1) ;Couleur alpha vertex 1
PokeB(*Spr3D + 52, R2) ;Couleur jaune vertex 2
PokeB(*Spr3D + 53, G2) ;Couleur rose vertex 2
PokeB(*Spr3D + 54, B2) ;Couleur cyan vertex 2
PokeB(*Spr3D + 55, A2) ;Couleur alpha vertex 2
PokeB(*Spr3D + 84, R3) ;Couleur jaune vertex 3
PokeB(*Spr3D + 85, G3) ;Couleur rose vertex 3
PokeB(*Spr3D + 86, B3) ;Couleur cyan vertex 3
PokeB(*Spr3D + 87, A3) ;Couleur alpha vertex 3
PokeB(*Spr3D + 116, R4) ;Couleur jaune vertex 4
PokeB(*Spr3D + 117, G4) ;Couleur rose vertex 4
PokeB(*Spr3D + 118, B4) ;Couleur cyan vertex 4
PokeB(*Spr3D + 119, A4) ;Couleur alpha vertex 4
ProcedureReturn 1
EndProcedure
Procedure.f curveValue(actuelle.f, Cible.f, P.f)
If P > 1000.0
P = 1000.0
EndIf
ProcedureReturn (actuelle + ( (Cible - actuelle) * P / 1000.0))
EndProcedure
Camera(1) = 0 ; X
Camera(2) = -600 ; Y
Camera(3) = 3000 ; Z
ZEbene.l = 240
BewegeX.b = 0
BewegeY.b = 0
BewegeZ.b = 10
sWidth = GetSystemMetrics_(#SM_CXSCREEN)
sHeight = GetSystemMetrics_(#SM_CYSCREEN)
hWnd = OpenWindow(1, 0, 0, sWidth, sHeight, "Galaxy", #PB_Window_BorderLess | #PB_Window_ScreenCentered )
OpenWindowedScreen(hWnd,0,0, sWidth, sHeight, 1, 0, 0)
xOffset.l = sWidth / 2
yOffset.l = sHeight / 2 + sHeight / 8
Size = 32
; Blanc
CreateSprite(0, Size * 2, Size * 2, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
For t = 1 To Size
c.f = (255 / Size * t)
Circle(Size, Size, Size - t, RGB(c, c, c))
Next
StopDrawing()
CreateSprite3D(0, 0)
; Jaune
CreateSprite(1, Size * 2, Size * 2, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
For t = 1 To Size
c.f = (255 / Size * t)
Circle(Size, Size, Size - t, RGB(c, c, 0))
Next
StopDrawing()
CreateSprite3D(1, 1)
; Rouge
CreateSprite(2, Size * 2, Size * 2, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(2))
For t = 1 To Size
c.f = (255 / Size * t)
Circle(Size, Size, Size - t, RGB(c, 0, 0))
Next
StopDrawing()
CreateSprite3D(2, 2)
; Orange
CreateSprite(3, Size * 2, Size * 2, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(3))
For t = 1 To Size
c.f = (255 / Size * t)
Circle(Size, Size, Size - t, RGB(c, c/2, 0))
Next
StopDrawing()
CreateSprite3D(3, 3)
; Bleu
CreateSprite(4, Size * 2, Size * 2, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(4))
For t = 1 To Size
c.f = (255 / Size * t)
Circle(Size, Size, Size - t, RGB(0, 0, c))
Next
StopDrawing()
CreateSprite3D(4, 4)
; Violet
CreateSprite(5, Size * 2, Size * 2, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(5))
For t = 1 To Size
c.f = (255 / Size * t)
Circle(Size, Size, Size - t, RGB(c, 0, c))
Next
StopDrawing()
CreateSprite3D(5, 5)
MaxRange.f = 0
MaxStars = 0
Angle.f = 0
tMax = 3
For t = 0 To tMax
Angle = t * ( (2 * #PI) / tMax)
Anglei.f = 0.0
Angleb.f = 0.0
While Anglei.f < #PI * 3
Anglei.f + 0.018
Angleb = Anglei + Angle
RangeX.f = Pow(Anglei,1.3) * 5
RangeY.f = Pow(Anglei,1.3) * 5
AddElement(Stars())
Stars()\x3 = Cos(Angleb) * RangeX*anglei
Stars()\z3 = Sin(Angleb) * RangeY*anglei
Stars()\y3 = Random(100) - 50
Stars()\Range = Sqr(Stars()\x3 * Stars()\x3 + Stars()\z3 * Stars()\z3 + Stars()\y3 * Stars()\y3)
Stars()\x3 = Cos(Angleb) * RangeX*anglei + (Stars()\Range / 1000 * (Random(100) - 50))
Stars()\z3 = Sin(Angleb) * RangeY*anglei + (Stars()\Range / 1000 * (Random(100) - 50))
Stars()\y3 = 0
Stars()\Range = Sqr(Stars()\x3 * Stars()\x3 + Stars()\z3 * Stars()\z3 + Stars()\y3 * Stars()\y3)
If Stars()\Range > MaxRange : MaxRange = Stars()\Range : EndIf
MaxStars + 1
Spr = Random(Int(Stars()\Range / 100))
If Spr < 0 : Spr = 0 : EndIf
If Spr > 5 : Spr = 5 : EndIf
Stars()\Spr = 0;Spr
Stars()\Type = 1
x.f = Stars()\x3
y.f = Stars()\z3
z.f = Stars()\y3
rd = Random(Angle / 100)
For tb = 0 To rd
AddElement(Stars())
Stars()\x3 = x + Random(100) - 50
Stars()\z3 = y + Random(100) - 50
Stars()\y3 = z + Random(100) - 50
Stars()\Range = Sqr(Stars()\x3 * Stars()\x3 + Stars()\z3 * Stars()\z3 + Stars()\y3 * Stars()\y3)
Stars()\Spr = Random(5)
Stars()\Type = 3
Stars()\Size = Random(24) -8
If Stars()\Range > MaxRange : MaxRange = Stars()\Range : EndIf
MaxStars + 1
Next
Wend
Next
MaxStars + 100
For t = 0 To 100
AddElement(Stars())
Stars()\x3 = Random(120) - 60
Stars()\z3 = Random(120) - 60
Stars()\y3 = Random(120) - 60
Stars()\Range = Sqr(Stars()\x3 * Stars()\x3 + Stars()\z3 * Stars()\z3 + Stars()\y3 * Stars()\y3)
If Stars()\Range > 60
Stars()\Spr = 1
Stars()\Type = 2
Else
Stars()\Spr = 0
Stars()\Type = 2
EndIf
Next
MaxStars + 500
For t = 0 To 500
AddElement(Stars())
Stars()\x3 = Random(4000) - 2000
Stars()\z3 = Random(4000) - 2000
Stars()\y3 = Random(4000) - 2000
Stars()\Range = Sqr(Stars()\x3 * Stars()\x3 + Stars()\z3 * Stars()\z3 + Stars()\y3 * Stars()\y3)
Stars()\Spr = 0
Stars()\Type = 4
Next
Repeat
ClearScreen(RGB(0,0,0))
ForEach Stars()
Proj(1) = Camera(1) - Stars()\x3
Proj(2) = Camera(2) - Stars()\y3
Proj(3) = Camera(3) - Stars()\z3
Lambda.f = (ZEbene - Stars()\z3) / Proj(3)
Stars()\x2 = xOffset + Stars()\x3 + Lambda * Proj(1) ; X
Stars()\y2 = yOffset + Stars()\y3 + Lambda * Proj(2) ; Y
Next
Start3D()
C1.l = #White
C2.l = RGB(64, 32, 255)
Ra.f=Red(#White) : Rb.f=Red(C2)
Ga.f=Green(#White) : Gb.f=Green(C2)
Ba.f=Blue(#White) : Bb.f=Blue(C2)
;i = 0
ForEach Stars()
pX2 = Stars()\x2
pY2 = Stars()\y2
If Stars()\Type = 1
Sprite3DBlendingMode(5, 7)
If Stars()\z3 < 0
Zoom.f = (Stars()\Range / 250 * 64)
Else
Zoom.f = (Stars()\Range / 250 * 64) + (Stars()\z3 / 2000 * 64)
EndIf
Alpha.f = (1 - Stars()\Range / MaxRange) * 255
Red.f = (((1 - Stars()\Range / MaxRange) * Ra) + (Stars()\Range / MaxRange * Rb)) / 4
Green.f = (((1 - Stars()\Range / MaxRange) * Ga) + (Stars()\Range / MaxRange * Gb)) / 4
Blue.f = (((1 - Stars()\Range / MaxRange) * Ba) + (Stars()\Range / MaxRange * Bb)) / 4
Color.l = RGB(Red,Green,Blue)
ColorSprite3D(Stars()\Spr, Color, Alpha)
ZoomSprite3D(Stars()\Spr, Zoom, Zoom)
DisplaySprite3D(Stars()\Spr, pX2 - Zoom / 2, pY2 - Zoom / 2, Alpha)
ElseIf Stars()\Type = 2
Sprite3DBlendingMode(2, 4)
Zoom.f = 128
ColorSprite3D(Stars()\Spr, #White)
ZoomSprite3D(Stars()\Spr, Zoom, Zoom)
DisplaySprite3D(Stars()\Spr, pX2 - Zoom / 2, pY2 - Zoom / 2, 128)
ElseIf Stars()\Type = 3
Sprite3DBlendingMode(5, 7)
Zoom.f = Stars()\Size
Alpha.f = (1 - Stars()\Range / MaxRange) * 255
ZoomSprite3D(Stars()\Spr, Zoom, Zoom)
DisplaySprite3D(Stars()\Spr, pX2 - Zoom / 2, pY2 - Zoom / 2, Alpha)
ZoomSprite3D(0, Zoom * 2, Zoom * 2)
DisplaySprite3D(0, pX2 - Zoom, pY2 - Zoom, Alpha)
ZoomSprite3D(0, Zoom * 2, Zoom * 2)
DisplaySprite3D(0, pX2 - Zoom, pY2 - Zoom, Alpha)
ZoomSprite3D(0, Zoom * 2, Zoom * 2)
DisplaySprite3D(0, pX2 - Zoom, pY2 - Zoom, Alpha)
Else
Sprite3DBlendingMode(2, 4)
Zoom.f = Stars()\z3 / 2000 * 8
ColorSprite3D(Stars()\Spr, #White)
ZoomSprite3D(Stars()\Spr, Zoom, Zoom)
DisplaySprite3D(Stars()\Spr, pX2 - Zoom / 2, pY2 - Zoom / 2, 128)
EndIf
Next
ExamineKeyboard()
ExamineMouse()
;
If KeyboardPushed(#PB_Key_Up); Or MouseDeltaY() < -0.5
BewegeY = 10
Camera(2) = curveValue(Camera(2), 1600, 20)
ElseIf KeyboardPushed(#PB_Key_Down); Or MouseDeltaY() > 0.5
BewegeY = -10
Camera(2) = curveValue(Camera(2), -1600, 20)
Else
;Camera(2) = curveValue(Camera(2), 0, 50)
;BewegeY = 0
EndIf
If KeyboardPushed(#PB_Key_Right); Or MouseDeltaX() > 0.5
BewegeX = 10
Camera(1) = curveValue(Camera(1), -1600, 20)
ElseIf KeyboardPushed(#PB_Key_Left); Or MouseDeltaX() < -0.5
BewegeX = -10
Camera(1) = curveValue(Camera(1), 1600, 20)
Else
;Camera(1) = curveValue(Camera(1), 0, 20)
;BewegeX = 0
EndIf
Counter + 0 . 02
If Counter > 2 * #PI : Counter = 0 : EndIf
;Camera(1) = Camera(1) + Sin(Counter.f)*10
;Camera(2) = Camera(2) + Cos(Counter.f)*10
;Camera(3) = Camera(3) + Sin(Counter.f)*10
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or WindowEvent() = #WM_CLOSE
End
Re: Algo Black Hole Spiral
Une petite version optimisé pour PB4.40Beta7 or >! sur ma machine qui a un Atom a 1,6Ghz je pas de 30 im/sec a 60 !!
)
Les 2 images dont vous avez besoin
Image1 (sun.png):
Image2 (fullhand.png):

Les 2 images dont vous avez besoin
Image1 (sun.png):

Image2 (fullhand.png):

Code : Tout sélectionner
UsePNGImageDecoder()
#dobro=1
#Police=1
#sprite=1
; ***********************************
InitSprite()
InitSprite3D()
InitKeyboard()
FontID = LoadFont(#Police, "arial", 50, #PB_Font_Bold )
EcranX = 800
EcranY = 600
WindowID = OpenWindow(1, 0, 0, EcranX, EcranY, "hello", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
Structure Prefs
ScreenWidth.l
ScreenHeight.l
EndStructure
Global Prefs.prefs
Prefs\ScreenWidth=EcranX
Prefs\Screenheight=EcranY
CompilerIf Subsystem("Directx7")
;Thanks Cpl.Bator !!!
Structure vertex
sx.f
sy.f
sz.f
rhw.f
Color.l
specular.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
Texture.l
Vertice.vertex[4]
Width.w
Height.w
EndStructure
CompilerElse ;Directx7
Structure D3DTLVERTEX
x.f
y.f
z.f
rhw.f
Color.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
TexRes.l ; TexRes
Vertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
TmpVertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
Width.l ; width set with ZoomSprite3D()
Height.l ; height set with ZoomSprite3D()
RealWidth.l
RealHeight.l
Angle.f
Transformed.l
EndStructure
CompilerEndIf
Procedure SetSpriteLuminosityEx(spriteid.l,lum.c)
Protected RGB_LUM.l,*S.PB_Sprite3D
;doit être dans un Start3D
; 255 = Pleine luminosité 0 = noir
RGB_LUM = RGBA(255,Lum,Lum,Lum);RGBA(255,Lum,255-(Lum/2),Lum)
*S=IsSprite3D(spriteid)
*S\Vertice[0]\Color = RGB_LUM
*S\Vertice[1]\Color = RGB_LUM
*S\Vertice[3]\Color = RGB_LUM
*S\Vertice[2]\Color = RGB_LUM
EndProcedure
#Spr_HoleHand=0
#Spr_HoleSun=1
LoadSprite(#Spr_HoleHand,"Gfx/fullhand.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
CreateSprite3D(#Spr_HoleHand,#Spr_HoleHand)
LoadSprite(#Spr_HoleSun,"Gfx/sun.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
CreateSprite3D(#Spr_HoleSun,#Spr_HoleSun)
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)
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)
SetSpriteLuminosityEx(#Spr_HoleHand,MyHole()\Alpha)
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
ZoomSprite3D(#Spr_HoleSun,32,32)
DisplaySprite3D(#Spr_HoleSun,MyHolePrefs\CordX-16,MyHolePrefs\CordY-16,200)
EndProcedure
Repeat
ExamineKeyboard()
Event=WindowEvent()
Delay(1)
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