Code archives/Graphics/Star field
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Basic 3d Stars | |||||
Const MAX_STAR=5000,STAR_SPEED=2,WIDTH=640,HEIGHT=480 Dim star_x(MAX_STAR),star_y(MAX_STAR),star_z(MAX_STAR) Graphics WIDTH,HEIGHT SetBuffer BackBuffer() setup_stars() While Not KeyDown(1) Cls UpdateStar() Flip Wend End Function setup_stars() For c=0 To MAX_STAR star_x(c)=Rnd(-(WIDTH/2),(WIDTH/2))Shl 8 star_y(c)=Rnd(-(HEIGHT/2),(HEIGHT/2))Shl 8 star_z(c)=Rnd(STAR_SPEED,255) Next End Function Function UpdateStar() For c=0 To MAX_STAR star_z(c)=star_z(c)-STAR_SPEED If star_z(c)<=STAR_SPEED Then star_z(c)=255 s_x=(star_x(c)/star_z(c))+(WIDTH/2) s_y=(star_y(c)/star_z(c))+(HEIGHT/2) col=255-star_z(c) Color col,col,col Plot s_x,s_y Next End Function |
Comments
| ||
anybody knows how to add the stars to a camera with movement ? tried it many times with projectedx but i didn't got it.. |
| ||
Nice :) Try replacing: Plot s_x,s_y in the UpdateStar function with: Rect s_x,s_y,col/50,col/50 give you a nice sense of depth :) |
| ||
For a bit of performance boost...Function UpdateStar() LockBuffer BackBuffer() For c=0 To MAX_STAR star_z(c)=star_z(c)-STAR_SPEED If star_z(c)<=STAR_SPEED Then star_z(c)=255 s_x=(star_x(c)/star_z(c))+(WIDTH/2) s_y=(star_y(c)/star_z(c))+(HEIGHT/2) col=255-star_z(c) If s_x>-1 And s_x<width And s_y>-1 And s_y<height argb=(col Or (col Shl 8) Or (col Shl 16) Or ($ff000000)) WritePixelFast s_x,s_y,argb,BackBuffer() EndIf Next UnlockBuffer BackBuffer() End Function You'll be able to tell the difference if you change your flip to flip false. |
Code Archives Forum