Назад

   Sync On
Sync Rate 30

Rem Создаем матрицу
Make matrix 1,10000,10000,20,20

Rem Текстурируем матрицу
Load image "grass09.bmp",1
Prepare matrix texture 1,1,1,1
Fill matrix 1,0,1

Rem Создаем объект
Load image "barry.bmp",2
Make object sphere 10,25
Texture object 10,2
position object 10,100,0,100

rem Устанавливаем случайные значения для вершин матрицы
randomize matrix 1,125

Rem Основной цикл
Do
set cursor 0,0
print screen fps()

 Rem  Сохраняем угол объекта
 AngleY# = object angle Y(10)

 Rem  Управление перемещением камеры
 If Upkey()=1
  XTest# = Newxvalue(X#,AngleY#,20)
  ZTest# = Newzvalue(Z#,AngleY#,20)
  If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
   Move object 10,10
  Endif
 Endif

 If Leftkey()=1 then Yrotate object 10,Wrapvalue(AngleY#-5)
 If Rightkey()=1 then Yrotate object 10,Wrapvalue(AngleY#+5)

 X# = Object position x(10)
 Z# = Object position z(10)
 Y# = Get Ground Height(1,X#,Z#)

 Position object 10,X#,Y#+12.5,Z#

 CameraZ# = Newzvalue(Z#,AngleY#-180,100)
 CameraX# = Newxvalue(X#,AngleY#-180,100)
 CameraY# = Get Ground Height(1,CameraX#,CameraZ#)
 Position camera CameraX#,CameraY#+50,CameraZ#

 Point camera X#,Y#+25,Z#
 Rem Обновляем экран
 Sync
Loop

Эта программа позволяет пользователю перемещать текстурированную сферу по матрице при помощи клавиатуры. Мы начнем этот урок с описания простой служебной команды.

 print screen fps()

"Screen Fps()" является полезной командой, с помощью которой можно узнать, с какой скоростью происходит обновление экрана. Попробуйте выставить значение синхронизации 0 и запустите программу. Вы увидите число на экране, показывающее, сколько раз в секунду происходит обновление экрана. Если частота обновления на вашей видеокарте привязана к частоте обновления монитора, вы не сможете узнать максимальную скорость обновления, которую способна выдавать ваша видеокарта. Некоторые видеокарты позволяют отключать синхронизацию ("VSync"), при этом экран обновляется с максимально возможной скоростью.

 X# = Object position x(10)
 Z# = Object position z(10)
 Y# = Get Ground Height(1,X#,Z#)

 Position object 10,X#,Y#+12.5,Z#

 CameraZ# = Newzvalue(Z#,AngleY#-180,100)
 CameraX# = Newxvalue(X#,AngleY#-180,100)
 CameraY# = Get Ground Height(1,CameraX#,CameraZ#)
 Position camera CameraX#,CameraY#+50,CameraZ#
 Point camera X#,Y#+25,Z#

Как и в предыдущем уроке, для нахождения высоты матрицы в определенном месте мы используем команду "Get Ground Height". Здесь мы используем эту команду дважды: один раз для того, чтобы определить высоту в месте, где располагается сфера, и второй раз для того, чтобы определить высоту в том месте, где располагается камера. Вы заметите, что оставшаяся часть кода такая же, как и в предыдущем уроке. Единственное, что мы здесь изменили - это добавили значение Y#.

Попробуйте использовать выражение "Rem", чтобы закомментировать следующую строку кода:

CameraY# = Get Ground Height(1,CameraX#,CameraZ#)

 

А в строке:

Position camera CameraX#,CameraY#+50,CameraZ#

замените переменную CameraY# на Y# и посмотрите, как это отражается на поведении камеры.

 

Hosted by uCoz