forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Скайбокс в космосе (http://forum.boolean.name/showthread.php?t=13414)

Kudesnic 27.09.2010 01:42

Скайбокс в космосе
 
Создает скайбокс космоса
Принцип действия:
Создается 3D мир по которому на определенном расстоянии расбрасываются спрайты звезд.
Камера, находящаяся в центре, "фоткает" сцену в шести направлениях и сохраняет картинки в папку sky\
По желанию в функции createworld() можно добавить еще декорации, например модели планет.
Код:

AppTitle "spacebox"

;sq - размер скайбокса
;r - радиус расброса звезд
;ns - количество звезд
;ni - Количество видов звезд

Const sq=512,name$="space"
Const r=300,ns=2000,ni=7
Const wi=sq,he=sq

Dim sp(ni,ns)
Dim s(ni)

Global cam,k,t$,im

SeedRnd MilliSecs()

Graphics3D wi,he,32,2
SetFont LoadFont("Arial",18)
SetBuffer BackBuffer()

createworld()

;MAIN_____________________________________________________
For k=1 To 6
;If KeyHit(57) Then updatecam()
;WaitKey()

updatecam()
UpdateWorld
RenderWorld

;Text wi/2,he/2,t+"*",1,1
Flip
image()
Cls
Next
End

;__________________________________________________________


;FUNCTIONS

Function image()
im=CreateImage(sq,sq)
GrabImage im,0,0
SaveImage (im,"sky\"+name+t+".bmp")
End Function

Function
updatecam()
Select k
Case 1
        RotateEntity cam,0,0,0
        t="fr"
Case 2
        RotateEntity cam,0,90,0
        t="lf"
Case 3
        RotateEntity cam,0,180,0
        t="bk"
Case 4
        RotateEntity cam,0,-90,0
        t="rt"
Case 5
        RotateEntity cam,90,0,0
        t="dn"
Case 6
        RotateEntity cam,-90,0,0
        t="up"
End Select
End Function


Function createworld()
cam=CreateCamera()
CameraRange cam,40,500

For i=1 To ni
;Загрузка спрайтов звезд
;ni-количество спрайтов

        s(i)=LoadSprite("stars\"+i+".png",1)
;способ загрузки спрайтов (в данном примере загружаются несколько
; файлов с именами "1.png","2.png","2.png"... из папки "stars\"

        ScaleSprite s(i),1,1
        For u=1 To ns
                sp(i,u)=CopyEntity(s(i))
                PositionEntity sp(i,u),Rand(-r,r),Rand(-r,r),Rand(-r,r)
        Next
Next
End Function



Часовой пояс GMT +4, время: 08:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot