(Always excuse me for my bad english

A little code to Draw a Galaxy ! It's a Team work from the french forum

You must to download this 3 images



If you have some idea to render better or optimize the code share your idea !
and use this code =>
Code: Select all
UsePNGImageDecoder()
#dobro=1
#Police=1
#sprite=1
; ***********************************
InitSprite()
InitSprite3D()
InitKeyboard()
FontID = LoadFont(#Police, "arial", 50, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=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,Lum,255)
*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()/40000
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)
DisplaySprite3D(20,CordX+x-Size/2,CordY+y-Size/2,Alpha)
DisplaySprite3D(22,CordX+x-Size/2,CordY+y-Size/2,255)
DisplaySprite3D(20,CordX+x2-Size/2,CordY+y2-Size/2,Alpha)
DisplaySprite3D(22,CordX+x2-Size/2,CordY+y2-Size/2,255)
DisplaySprite3D(20,CordX+x3-Size/2,CordY+y3-Size/2,Alpha)
DisplaySprite3D(22,CordX+x3-Size/2,CordY+y3-Size/2,255)
DisplaySprite3D(20,CordX+x4-Size/2,CordY+y4-Size/2,Alpha)
DisplaySprite3D(22,CordX+x4-Size/2,CordY+y4-Size/2,255)
Next
ZoomSprite3D(21,64,64)
DisplaySprite3D(21,CordX-32,CordY-32,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
Until Event=#PB_Event_CloseWindow