0 Members and 1 Guest are viewing this topic.
'' Stars with Camera' Original BB Source by Thygrion.' FB TinyPtc adaption by Clyde Radcliffe May 06.'#Include Once "tinyptc.bi"Chdir ExepathOption StaticOption ExplicitConst XRES=640Const YRES=480Const ARES=XRES*YRESRandomize TimerConst PI = 3.141593Const MAXSTARS=10000Dim Shared ScreenBuffer( ARES )Dim Shared As Double StarX( MAXSTARS ), StarY( MAXSTARS ), StarZ( MAXSTARS ), StarZV( MAXSTARS )Dim Shared move As Double = .05Dim Shared damping As Double = .99Dim Shared zoom As Double = 5Dim Shared As Double camx, camy, camz, camxv, camyvDeclare Sub ClearBuffer( Buffer(), ByVal Col As Integer=&H00000000 )Declare Sub FeedPixels( buffer(), Byval x As Integer, Byval y As Integer, Byval col As Integer)Declare Sub InitializeStars()Declare Sub RunStars()Declare Sub StarPositions( ByVal StarNo )Declare Sub UpdateStars()InitializeStars()RunStars()EndSub ClearBuffer( Buffer(), ByVal Col As Integer=&H00000000 ) Dim x,y For y=0 to YRES-1 For x=0 to XRES-1 FeedPixels( Buffer(), x, y, col ) Next Next End SubSub FeedPixels( buffer(), Byval x As Integer, Byval y As Integer, Byval col As Integer) If ( x>0 And x<XRES-1) And (y>0 And y<YRES-1) Then Buffer( y * XRES + x ) = col End IfEnd SubSub InitializeStars() If( ptc_open( "Camera Stars TinyPTC", XRES, YRES ) = 0 ) Then End -1 End if Dim i For i = 1 To MAXSTARS StarPositions(i) Next End SubSub RunStars() Dim Key As String While Key<>Chr(27) UpdateStars() Ptc_Update @ScreenBuffer(0) ClearBuffer( ScreenBuffer() ) Key=Inkey() Wend Ptc_Close End SubSub StarPositions( ByVal StarNo ) StarX( StarNo ) = (Rnd(1)*2000)-1000 StarY( StarNo ) = (Rnd(1)*2000)-1000 StarZ( StarNo ) = (Rnd(1)*2000)-1000 StarZV( StarNo ) = Rnd(1)*5.0End SubSub UpdateStars() Dim i Dim As Double cx,sx,cy,sy,cz,sz Dim As Double sxsx, sxsy Dim As Double m00,m01,m02 Dim As Double m10,m11,m12 Dim As Double m20,m21,m22 Dim As Double cxsx, cxsy Dim As Double tx, ty, tz Dim As Double rx,ry,rz Dim As Double nx,ny Dim As Double c1,c2,c3 Dim As Double ARGB1, ARGB2, ARGB3 cx = Cos(camx * PI/180.00 ) sx = Sin(camx * PI/180.00 ) cy = Cos(camy * PI/180.00 ) sy = Sin(camy * PI/180.00 ) cz = Cos(camz * PI/180.00 ) sz = Sin(camz * PI/180.00 ) sxsy = Cdbl(sx * sy) cxsy = Cdbl(cx * sy) m00 = Cdbl( cy * cz) m01 = Cdbl(-cy * sz) m02 = sy m10 = cdbl(cx * sz) + cdbl(sxsy * cz) m11 = cdbl(cx * cz) - cdbl(sxsy * sz) m12 = cdbl(-sx * cy) m20 = cdbl(sx * sz) - cdbl(cxsy * cz) m21 = cdbl(sx * cz) + cdbl(cxsy * sz) m22 = cdbl(cx * cy) For i = 1 To MAXSTARS starz(i) = starz(i) - starzv(i) tx = starx(i) ty = stary(i) tz = starz(i) rx = cdbl(tx * m00) + cdbl(ty * m10) + cdbl(tz * m20) ry = cdbl(tx * m01) + cdbl(ty * m11) + cdbl(tz * m21) rz = cdbl(tx * m02) + cdbl(ty * m12) + cdbl(tz * m22) nx = (( cdbl(rx / rz) * 100) * zoom) + (XRES Shr 1) ny = ((-cdbl(ry / rz) * 100) * zoom) + (YRES Shr 1) If starz( i ) <= -1000 then starpositions( i ) starz ( i ) = 1000 ElseIf nx>1 And nx <XRES-2 And ny>1 And ny<YRES-2 And rz>0 And rz <=1000 then c1 = 255 * csng(1.0 - csng(rz / 1000.0)) c2 = c1 * .66 c3 = c1 * .33 argb1 = (c1 Shl 16 ) Or ( c1 Shl 8 ) Or c1 argb2 = (c2 Shl 16 ) Or ( c2 Shl 8 ) Or c2 argb3 = (c3 Shl 16 ) Or ( c3 Shl 8 ) Or c3 FeedPixels( ScreenBuffer(), nx+0, ny+0, ARGB1 ) FeedPixels( ScreenBuffer(), nx-1, ny+0, ARGB2 ) FeedPixels( ScreenBuffer(), nx+1, ny+0, ARGB2 ) FeedPixels( ScreenBuffer(), nx+0, ny-1, ARGB2 ) FeedPixels( ScreenBuffer(), nx+0, ny+1, ARGB2 ) FeedPixels( ScreenBuffer(), nx-2, ny+0, ARGB3 ) FeedPixels( ScreenBuffer(), nx+2, ny+0, ARGB3 ) FeedPixels( ScreenBuffer(), nx+0, ny-2, ARGB3 ) FeedPixels( ScreenBuffer(), nx+0, ny+2, ARGB3 ) EndIf Next camx = camx + .25 camy = camy + .5 camz = camz + .25End Sub