Attention 320x240 pixel en résolution

C'est que du tripatouillage


File:1->3DSoftwareZBuffer.rar

Code : Tout sélectionner
Sw_=1024
Sh_=768
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0 Or InitSprite3D() = 0
End
EndIf
OpenScreen(Sw_,Sh_,32,"")
Structure VECTOR2
x.f
y.f
EndStructure
Structure VECTOR3
x.f
y.f
z.f
EndStructure
Structure SEGMENT3D
A.VECTOR3
B.VECTOR3
EndStructure
Structure SEGMENT2D
A.VECTOR2
B.VECTOR2
EndStructure
MaLigne3D.SEGMENT3D
; Premier point 3D
MaLigne3D\A\x = -100
MaLigne3D\A\y = 100
MaLigne3D\A\z = -1000
; Le second...
MaLigne3D\B\x = 100
MaLigne3D\B\y = 100
MaLigne3D\B\z = -1000
;Projection de la ligne 3D sur l'ecran...
MaLigne3D_Projetion.SEGMENT2D
Gosub Projection
Repeat
ExamineKeyboard() : ExamineMouse()
ClearScreen(0)
; On joue avec la profondeur (Z) de cette ligne ( entre 0 et 200 sur 1 seconde )
MaLigne3D\A\z = 100 + 100 * Cos(ElapsedMilliseconds()/1000)
MaLigne3D\B\z = 100 + 100 * Cos(ElapsedMilliseconds()/1000)
Gosub Projection
Gosub Trace
FlipBuffers(2)
Until KeyboardPushed(#PB_Key_Escape)
End
Projection:
; Projection du premier point
MaLigne3D_Projetion\A\x = (MaLigne3D\A\x * 512) / (MaLigne3D\A\z + 150) + Sw_/2
MaLigne3D_Projetion\A\y = (MaLigne3D\A\y * 512) / (MaLigne3D\A\z + 150) + Sh_/2
; du second...
MaLigne3D_Projetion\B\x = (MaLigne3D\B\x * 512) / (MaLigne3D\B\z + 150) + Sw_/2
MaLigne3D_Projetion\B\y = (MaLigne3D\B\y * 512) / (MaLigne3D\B\z + 150) + Sh_/2
Return
Trace:
StartDrawing(ScreenOutput())
LineXY(MaLigne3D_Projetion\A\x,MaLigne3D_Projetion\A\y,MaLigne3D_Projetion\B\x,MaLigne3D_Projetion\B\y,RGB(64,128,255))
StopDrawing()
Return