Un peu de légèreté...
Publié : mer. 21/oct./2009 6:25
Bon... Voilà... Les touches dispo sont les 4 flèches, la touche Tab, la touche A, [Entrée] et [Backspace]. 8 touches et bonne promenade!
Code : Tout sélectionner
DisableDebugger
N = 3999
Global.F Dim X(N), Dim Y(N), Dim Z(N), Dim S(N), H, R, A
Macro Ro(CoA, CoB, CoC) ; Macro d'une procédure de rotation
Procedure R#CoA(i, Angle.F)
Protected.F X, Y, Z
X = X(i)
Y = Y(i)
Z = Z(i)
H = CoA
R = Sqr((CoB * CoB) + (CoC * CoC) )
A = ACos(CoC / R): If CoB < 0.0: A = 0.0 - A: EndIf
CoA#(i) = H
CoB#(i) = Sin(A + Angle) * R
CoC#(i) = Cos(A + Angle) * R
EndProcedure
EndMacro
Ro(x,y,z):Ro(y,z,x):Ro(z,x,y) ;3 procs pour les 3 rotations X, Y et Z
InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()
ExamineDesktops()
Dw = DesktopWidth(0)
Dh = DesktopHeight(0)
Dd = DesktopDepth(0)
Dhw = Dw / 2: Dhh = Dh / 2
OpenScreen(Dw, Dh, Dd, "")
KeyboardMode(#PB_Keyboard_International)
For I = 0 To N
S(I) = 0
X(I) = Random(1000000) / 10.0 - 50000.0
Y(I) = Random(1000000) / 10.0 - 50000.0
Z(I) = Random(1000000) / 10.0 - 50000.0
Next I
Zoom.F = 1.0
Size = 512
CreateImage(0, Size, Size, 32)
StartDrawing(ImageOutput(0) )
For I = 0 To (Size / 2)
G = I * 511 / Size
Circle(Size / 2, Size / 2, (Size - (I * 2) ) / 2, RGBA(G, G, G, 255) )
Next I
StopDrawing()
CreateSprite(0, Size, Size, #PB_Sprite_Texture | #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(0) )
DrawAlphaImage(ImageID(0), 0, 0)
DrawingMode(#PB_2DDrawing_AlphaChannel)
DrawAlphaImage(ImageID(0), 0, 0)
StopDrawing()
CreateSprite3D(0, 0)
PitchCamera.F = 0.0: PitchCameraAccel.F = 0.001
TurnCamera.F = 0.0: TurnCameraAccel.F = 0.001
RollCamera.F = 0.0: RollCameraAccel.F = 0.001
CameraSpeed.F = 0.0: Size2 = Size / 2
Repeat
Delay(1)
ExamineKeyboard()
ExamineMouse()
ClearScreen(RGBA(0, 0, 0, 0) )
Start3D()
Sprite3DBlendingMode(5, 7)
If KeyboardPushed(#PB_Key_Left): RollCamera - RollCameraAccel: EndIf
If KeyboardPushed(#PB_Key_Right): RollCamera + RollCameraAccel: EndIf
If KeyboardPushed(#PB_Key_Down): PitchCamera + PitchCameraAccel: EndIf
If KeyboardPushed(#PB_Key_Up): PitchCamera - PitchCameraAccel: EndIf
If KeyboardPushed(#PB_Key_Tab): TurnCamera + TurnCameraAccel: EndIf
If KeyboardPushed(#PB_Key_A): TurnCamera - TurnCameraAccel: EndIf
If KeyboardPushed(#PB_Key_Back): CameraSpeed / 1.1: EndIf
If KeyboardPushed(#PB_Key_Return): CameraSpeed + 10.0: EndIf
For I = 0 To N
Z(I) - CameraSpeed: If Z(I) < - 50000.0: Z(I) + 100000.0: EndIf
Rx(I, PitchCamera)
Ry(I, TurnCamera)
Rz(I, RollCamera)
Coef.F = 400.0 / Z(i) * Zoom
If Z(i) > 0.0
DisplaySprite3D(S(i), 0, 0)
sx1 = Dhw + (X(i) - Size2) * Coef
sy1 = Dhh + (Y(i) - Size2) * Coef
sx2 = Dhw + (X(i) + Size2) * Coef
sy2 = Dhh + (Y(i) - Size2) * Coef
sx3 = Dhw + (X(i) + Size2) * Coef
sy3 = Dhh + (Y(i) + Size2) * Coef
sx4 = Dhw + (X(i) - Size2) * Coef
sy4 = Dhh + (Y(i) + Size2) * Coef
sz.F = Coef * 100
TransformSprite3D(S(I), sx1, sy1, sz, sx2, sy2, sz, sx3, sy3, sz, sx4, sy4, sz)
EndIf
Next I
PitchCamera * 0.99
TurnCamera * 0.99
RollCamera * 0.99
CameraSpeed * 0.999
Stop3D()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
End