Тема: Ланшафт
Показать сообщение отдельно
Старый 01.03.2007, 15:16   #13
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
Re: Ланшафт

Вот максимально простой вариант:
Список Data можно продолжать в зависимости от размера terrain'а

 
Graphics3D 800,600,32,2
SetBuffer BackBuffer() 
HidePointer()
ter_size=32
x_scale=10
y_scale=50
z_scale=10
camera=CreateCamera() 
PositionEntity camera,50,40,-50 

light=CreateLight() 
RotateEntity light,90,0,0 

ter=CreateTerrain(ter_size) 
ScaleEntity ter,x_scale,y_scale,z_scale 
EntityColor ter,150,150,200

Restore ter_data
Read ter_mod_count 

For n = 1 To ter_mod_count 
 Read cx 
 Read cz
 Read y_mod 
 ModifyTerrain ter,cx,cz,y_mod
 
Next 
 
While Not KeyDown(1) 

 Camera_Look(camera)
 Camera_Free_Fly(camera)

RenderWorld 
Flip 
Wend 
End  
Function Camera_Look(cam,speedx#=2,speedy#=2,dang=-89,upang=89)
 mxs=MouseXSpeed()
 mys=MouseYSpeed()
 xrot#=EntityPitch(cam)
 yrot#=EntityYaw(cam)
 If(xrot#<upang)And(mys>0)Then xrot#=xrot#+speedx#*mys/10  
 If(xrot#>upang)And(mys>0)Then xrot#=upang 
 If(xrot#>dang)And(mys<0)Then xrot#=xrot#+speedx#*mys/10 
 If(xrot#<dang)And(mys<0)Then xrot#=dang  
 yrot=yrot-speedy#*mxs/10 
 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
 RotateEntity cam,xrot,yrot,0
End Function
Function Camera_Free_Fly(Obj,mf#=.5,mb#=.5,ml#=.5,mr#=.5)
 If KeyDown(17) Then MoveEntity Obj,  0 ,0, mf#;W
 If KeyDown(31) Then MoveEntity Obj,  0 ,0,-mb#;S 
 If KeyDown(30) Then MoveEntity Obj,-ml#,0,  0 ;A
 If KeyDown(32) Then MoveEntity Obj, mr#,0,  0 ;D
End Function
.ter_data
Data 5
Data 1,1,1
Data 2,2,0
Data 3,3,0
Data 4,4,0
Data 5,5,10
(Offline)
 
Ответить с цитированием