0 Members and 1 Guest are viewing this topic.
AuthorThygrionDBF: CoderPosts: 224(9/4/05 2:42)4.242.3.58Reply | Edit | Del All 3D Starfield with Rotating Camera Here's something I've been playing around with, it's just a simple 3D starfield that has a rotating camera.Code: [Select]; 3D Starfield with rotating cameraAppTitle "3D Starfield with rotating camera"Const width = 640Const height = 480Graphics width,height,32,1SetBuffer BackBuffer()SeedRnd MilliSecs()Type star Field x# Field y# Field z# Field zv#End TypeGlobal numstars = 5000 ; Mess with this!!!Dim s.star(numstars)initstars()Global move# = .05Global damping# = .99Global zoom# = 3Global camx# = 0Global camy# = 0Global camz# = 0Global camxv# = 0Global camyv# = 0Global camzv# = 0Global camxa# = 0Global camya# = 0Global camza# = 0While Not KeyDown(1)ClsLockBufferupdatestars()UnlockBufferupdatecamera()FlipWendDelete Each starEndFunction initstars()For i = 1 To numstars s.star(i) = New star initstar(i)NextEnd FunctionFunction initstar(i)s(i)\x# = Rnd(-1000,1000)s(i)\y# = Rnd(-1000,1000)s(i)\z# = Rnd(-1000,1000)s(i)\zv# = Rnd(1.0,5.0)End FunctionFunction updatestars()cx# = Cos(camx#)sx# = Sin(camx#)cy# = Cos(camy#)sy# = Sin(camy#)cz# = Cos(camz#)sz# = Sin(camz#)sxsy# = Float(sx# * sy#)cxsy# = Float(cx# * sy#)m00# = Float(cy# * cz#)m01# = Float(-cy# * sz#)m02# = sy#m10# = Float(cx# * sz#) + Float(sxsy# * cz#)m11# = Float(cx# * cz#) - Float(sxsy# * sz#)m12# = Float(-sx# * cy#)m20# = Float(sx# * sz#) - Float(cxsy# * cz#)m21# = Float(sx# * cz#) + Float(cxsy# * sz#)m22# = Float(cx# * cy#)For i = 1 To numstars s(i)\z# = s(i)\z# - s(i)\zv# tx# = s(i)\x# ty# = s(i)\y# tz# = s(i)\z# rx# = Float(tx# * m00#) + Float(ty# * m10#) + Float(tz# * m20#) ry# = Float(tx# * m01#) + Float(ty# * m11#) + Float(tz# * m21#) rz# = Float(tx# * m02#) + Float(ty# * m12#) + Float(tz# * m22#) nx = ((Float(rx# / rz#) * 100) * zoom#) + (width Shr 1) ny = ((-Float(ry# / rz#) * 100) * zoom#) + (height Shr 1) If s(i)\z# <= -1000 initstar(i) s(i)\z# = 1000 ElseIf nx > 1 And nx < width - 2 And ny > 1 And ny < height - 2 And rz# > 0 And rz# <= 1000 c = 255 * Float(1.0 - Float(rz# / 1000.0)) c2 = c * .66 c3 = c * .33 argb2 = (c2 Shl 16) + (c2 Shl 8) + c2 argb3 = (c3 Shl 16) + (c3 Shl 8) + c3 WritePixelFast nx,ny,(c Shl 16) + (c Shl 8) + c WritePixelFast nx - 1,ny,argb2 WritePixelFast nx + 1,ny,argb2 WritePixelFast nx,ny - 1,argb2 WritePixelFast nx,ny + 1,argb2 WritePixelFast nx - 2,ny,argb3 WritePixelFast nx + 2,ny,argb3 WritePixelFast nx,ny - 2,argb3 WritePixelFast nx,ny + 2,argb3 EndIfNextEnd FunctionFunction updatecamera();camxa# = Rnd(-move#,move#) * damping#;camya# = Rnd(-move#,move#) * damping#;camza# = Rnd(-move#,move#) * damping#;camxv# = camxv# + camxa#;camyv# = camyv# + camya#;camzv# = camzv# + camza#;camxv# = camxv# * damping#;camyv# = camyv# * damping#;camzv# = camzv# * damping#camx# = camx# + .25;camxv#camy# = camy# + .5;camyv#camz# = camz# + .25;camzv#End FunctionHope someone likes it
; 3D Starfield with rotating cameraAppTitle "3D Starfield with rotating camera"Const width = 640Const height = 480Graphics width,height,32,1SetBuffer BackBuffer()SeedRnd MilliSecs()Type star Field x# Field y# Field z# Field zv#End TypeGlobal numstars = 5000 ; Mess with this!!!Dim s.star(numstars)initstars()Global move# = .05Global damping# = .99Global zoom# = 3Global camx# = 0Global camy# = 0Global camz# = 0Global camxv# = 0Global camyv# = 0Global camzv# = 0Global camxa# = 0Global camya# = 0Global camza# = 0While Not KeyDown(1)ClsLockBufferupdatestars()UnlockBufferupdatecamera()FlipWendDelete Each starEndFunction initstars()For i = 1 To numstars s.star(i) = New star initstar(i)NextEnd FunctionFunction initstar(i)s(i)\x# = Rnd(-1000,1000)s(i)\y# = Rnd(-1000,1000)s(i)\z# = Rnd(-1000,1000)s(i)\zv# = Rnd(1.0,5.0)End FunctionFunction updatestars()cx# = Cos(camx#)sx# = Sin(camx#)cy# = Cos(camy#)sy# = Sin(camy#)cz# = Cos(camz#)sz# = Sin(camz#)sxsy# = Float(sx# * sy#)cxsy# = Float(cx# * sy#)m00# = Float(cy# * cz#)m01# = Float(-cy# * sz#)m02# = sy#m10# = Float(cx# * sz#) + Float(sxsy# * cz#)m11# = Float(cx# * cz#) - Float(sxsy# * sz#)m12# = Float(-sx# * cy#)m20# = Float(sx# * sz#) - Float(cxsy# * cz#)m21# = Float(sx# * cz#) + Float(cxsy# * sz#)m22# = Float(cx# * cy#)For i = 1 To numstars s(i)\z# = s(i)\z# - s(i)\zv# tx# = s(i)\x# ty# = s(i)\y# tz# = s(i)\z# rx# = Float(tx# * m00#) + Float(ty# * m10#) + Float(tz# * m20#) ry# = Float(tx# * m01#) + Float(ty# * m11#) + Float(tz# * m21#) rz# = Float(tx# * m02#) + Float(ty# * m12#) + Float(tz# * m22#) nx = ((Float(rx# / rz#) * 100) * zoom#) + (width Shr 1) ny = ((-Float(ry# / rz#) * 100) * zoom#) + (height Shr 1) If s(i)\z# <= -1000 initstar(i) s(i)\z# = 1000 ElseIf nx > 1 And nx < width - 2 And ny > 1 And ny < height - 2 And rz# > 0 And rz# <= 1000 c = 255 * Float(1.0 - Float(rz# / 1000.0)) c2 = c * .66 c3 = c * .33 argb2 = (c2 Shl 16) + (c2 Shl 8) + c2 argb3 = (c3 Shl 16) + (c3 Shl 8) + c3 WritePixelFast nx,ny,(c Shl 16) + (c Shl 8) + c WritePixelFast nx - 1,ny,argb2 WritePixelFast nx + 1,ny,argb2 WritePixelFast nx,ny - 1,argb2 WritePixelFast nx,ny + 1,argb2 WritePixelFast nx - 2,ny,argb3 WritePixelFast nx + 2,ny,argb3 WritePixelFast nx,ny - 2,argb3 WritePixelFast nx,ny + 2,argb3 EndIfNextEnd FunctionFunction updatecamera();camxa# = Rnd(-move#,move#) * damping#;camya# = Rnd(-move#,move#) * damping#;camza# = Rnd(-move#,move#) * damping#;camxv# = camxv# + camxa#;camyv# = camyv# + camya#;camzv# = camzv# + camza#;camxv# = camxv# * damping#;camyv# = camyv# * damping#;camzv# = camzv# * damping#camx# = camx# + .25;camxv#camy# = camy# + .5;camyv#camz# = camz# + .25;camzv#End Function