Re: Vol libre dans un champ d'étoiles
Publié : mar. 16/nov./2010 14:55
Bon, pour l'instant je n'ai pas plus d'info sur la nouvelle manière dont les Dim se comportent donc j'adopte, au moins temporairement la méthode de Comtois, mais je ne la comprends pas très bien car le redimensionnement devient alors chose impossible.
Sinon dans le code du post 1 de ce sujet, vue que la perspective se trouve en une seule ligne (Ligne n° 76), et que je persiste à dire qu'il y a une multitude de méthodes de perspectives puisque, je me cite, la perspective est une illusion, ben j'en mets une autre au pif: la perspective Oeil du Judas par exemple. Comme ça, dans Colle Off d'outil, le soldat peut anticiper un tir à travers une porte de HLM. M'enfin moi, la guerre, ce n'est pas mon trip...
J'ai rajouté aussi le réglage du zoom (2 lignes de +) avec les touches O et P pour bien faire voir le truc. Sinon, n'oubliez pas: il y a TROIS rotations! Comme le titre l'indique, c'est un vol vraiment libre, qui ne rame pas, et qui ne plante pas avec une IMA par ci ou par là...
Vous pouvez comparer par rapport au premier code: pas vraiment de modification. Donc pas vraiment beaucoup de boulot de fait, je suis désolé, voilà.
Et... Viva el PorBAJICOS compilatores !
Sinon dans le code du post 1 de ce sujet, vue que la perspective se trouve en une seule ligne (Ligne n° 76), et que je persiste à dire qu'il y a une multitude de méthodes de perspectives puisque, je me cite, la perspective est une illusion, ben j'en mets une autre au pif: la perspective Oeil du Judas par exemple. Comme ça, dans Colle Off d'outil, le soldat peut anticiper un tir à travers une porte de HLM. M'enfin moi, la guerre, ce n'est pas mon trip...
J'ai rajouté aussi le réglage du zoom (2 lignes de +) avec les touches O et P pour bien faire voir le truc. Sinon, n'oubliez pas: il y a TROIS rotations! Comme le titre l'indique, c'est un vol vraiment libre, qui ne rame pas, et qui ne plante pas avec une IMA par ci ou par là...
Vous pouvez comparer par rapport au premier code: pas vraiment de modification. Donc pas vraiment beaucoup de boulot de fait, je suis désolé, voilà.
Et... Viva el PorBAJICOS compilatores !
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
If KeyboardPushed(#PB_Key_O): Zoom * 1.01: EndIf
If KeyboardPushed(#PB_Key_P): Zoom / 1.01: 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)
If Z(i) > 0.0
Coef.F = 400.0 / Sqr(X(i) * X(i) + Y(i) * Y(i) + Z(i) * Z(i) ) * Zoom
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