Code : Tout sélectionner
;*************************************************************************************************************************************************************************
InitSprite()
ExamineDesktops()
Define.S MainTitle = "None"
Define.I Flags = #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_ScreenCentered
Define.I Flip = #PB_Screen_SmartSynchronization
Define.I Freq = DesktopFrequency(0)
Define.I Delta = 1000 / Freq
OpenWindowedScreen(WindowID(OpenWindow(#PB_Any, 0, 100, 1024, 768, MainTitle, Flags) ), 0, 0, 1024, 768, 1, 0, 0, Flip)
Macro _DispCircCalc()
x = Cos(Angle) * Radius * Cos(AngleY)
y = Sin(Angle) * Radius
x1 = Cos(AngleZ) * x + Sin(AngleZ) * y
y1 = Cos(AngleZ2) * x + Sin(AngleZ2) * y
EndMacro
Procedure DisplayCircle(cx, cy, Radius.D, SpriteN, AngleY.D = 0.0, AngleZ.D = 0.0)
Define.D Angle, X, Y, AngleZ2 = AngleZ + (#PI / 2.0)
_DispCircCalc()
Repeat
Angle + 0.12566
x0 = x1
y0 = y1
_DispCircCalc()
If x0 * y1 - x1 * y0 > 0
TransformSprite(SpriteN, x1, y1, 0, 0, 0, 0, x0, y0)
Else
TransformSprite(SpriteN, x0, y0, 0, 0, 0, 0, x1, y1)
EndIf
DisplayTransparentSprite(SpriteN, cx, cy)
Until Angle > 6.283 - 0.12564
EndProcedure
Define.D Alpha = 8.0
Define QuadI
Dim Quad.I(255)
Define Xc.D
CreateSprite(0, 256, 16, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(0) )
DrawingMode(#PB_2DDrawing_AllChannels)
W = OutputWidth()
H = OutputHeight()
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
Box(0, 0, W, H, RGBA(255, 255, 255, 255) )
StopDrawing()
EndIf
Quad(QuadI) = CreateSprite(#PB_Any, 256, 16, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(Quad(QuadI) ) )
DrawingMode(#PB_2DDrawing_AllChannels)
W = OutputWidth()
H = OutputHeight()
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
For X = 0 To W - 1
Xc = 255 - Pow(Pow(255, Alpha) - Pow(254 - X, Alpha), 1 / Alpha)
If Xc > 255
Xc = 255
EndIf
If Xc < 0
Xc = 0
EndIf
Cr = 255
Cg = 255
Cb = 255
If X < (W - 1)
Ca = Xc
Else
Ca = Xc / 2
EndIf
Line(X, 0, 1, H, RGBA(Cr, Cg, Cb, Ca) )
Next
StopDrawing()
EndIf
QuadI + 1
Quad(QuadI) = CreateSprite(#PB_Any, 256, 16, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(Quad(QuadI) ) )
Alpha = 2
DrawingMode(#PB_2DDrawing_AllChannels)
W = OutputWidth()
H = OutputHeight()
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
For X = 0 To W - 1
Xc = Pow(Pow(255.0, Alpha) - Pow(255 - X, Alpha), 1.0 / Alpha)
If Xc > 255
Xc = 255
EndIf
If Xc < 0
Xc = 0
EndIf
Cr = 255
Cg = 255
Cb = 255
If X < (W - 1)
Ca = Xc
Else
Ca = Xc / 2
EndIf
Line(X, 0, 1, H, RGBA(Cr, Cg, Cb, Ca) )
Next
StopDrawing()
EndIf
QuadI + 1
Quad(QuadI) = CreateSprite(#PB_Any, 256, 1, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(Quad(QuadI) ) )
DrawingMode(#PB_2DDrawing_AllChannels)
W = OutputWidth()
H = OutputHeight()
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
For I = 0 To W / 2 - 1
Box(I, 0, 1, H, RGBA(255 - Random(63), 255 - Random(127), 255 - Random(255), Random(255) ) )
Next
StopDrawing()
EndIf
QuadI + 1
Quad(QuadI) = CreateSprite(#PB_Any, 256, 16, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(Quad(QuadI) ) )
DrawingMode(#PB_2DDrawing_AllChannels)
W = OutputWidth()
H = OutputHeight()
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
For X = 0 To W - 1
Xc = 255 - Pow(Pow(255, Alpha) - Pow(X, Alpha), 1 / Alpha)
If Xc > 255
Xc = 255
EndIf
If Xc < 0
Xc = 0
EndIf
Cr = 0
Cg = 0
Cb = 0
If X < (W - 1)
Ca = Xc
Else
Ca = Xc / 2
EndIf
Line(X, 0, 1, H, RGBA(Cr, Cg, Cb, Ca) )
Next
StopDrawing()
EndIf
W = ScreenWidth()
H = ScreenHeight()
cx = W / 2
cy = H / 2
Define.D Angle0, Angle1, Angle2, AngleMi, Angle, Radius = 32, AngZ, AngY = 3.0 * #PI / 8.0
#Nb = 511
Dim rho.D(#Nb)
Dim teta.D(#Nb)
Dim cx.D(#Nb)
Dim cy.D(#Nb)
Dim Radius.D(#Nb)
Dim AngY.D(#Nb)
Dim AngZ.D(#Nb)
For J = 0 To #Nb
teta(J) = Random(628) / 100.0
rho.D = Cos((Random(157.0) / 100.0) * 0.9)
rho(J) = rho
cx(J) = rho * Cos(teta(J) )
cy(J) = rho * Sin(teta(J) )
Radius(J) = (450 + Random(50) ) / 5000
AngY(J) = -ATan2(Sqr(1 - (rho*rho) ), rho)
AngZ(J) = -teta(J)
Next
Repeat
ClearScreen(0)
TscI = 0
DisplayCircle(cx + 180, cy - 50, Radius / 3, Quad(1) )
For J = 0 To #Nb
teta(J) + ((1.0 - rho(J)*rho(J) ) / 10.0)
cjx.D = rho(J) * Cos(teta(J) )
cjy.D = rho(J) * Sin(teta(J) )
DisplayCircle(cx + 180 + (cjx * (radius / 3)), cy - 50 + (cjy * (radius/3)), Radius * Radius(J), Quad(3), AngY(J), AngZ(J) )
Next
DisplayCircle(cx + 100, cy + 100, Radius / 2, Quad(0) )
DisplayCircle(cx, cy, Radius, Quad(2), AngY, AngZ)
Radius * 1.02
AngZ + (#PI / 100.0)
AngY + (#PI / 10.0)
TscI = 1
FlipBuffers()
Until WaitWindowEvent(Delta) = #PB_Event_CloseWindow