Руководство по созданию 3D-игр.
В прошлом номере рассылки мы научились делать матрицу (Землю),
"покрывать" ее текстурой травы и перемещаться по ней.
Сегодня мы сделаем вид от третьего лица (вид "из глаз" главного персонажа
нашей игры) и создадим туман. Поехали! :-)
Для более детальной и полной информации - рекомендую обратиться к
первоисточникам. А это компания "Медиахаус" и "Руководство пользователя",
которое вы получаете в коробке с лицензионным DarkBASIC-ом.
II. МАТРИЦА
4. Вид от третьего лица и перемещение на матрице
Цель урока: научиться перемещать объект на матрице, используя вид от третьего лица.
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# и посмотрите, как это отражается на поведении камеры.
5.Туман и задник
Цель урока: объяснить применение основных команд для создания тумана и задника.
Команды тумана в основном применяются для создания тумана в 3D-сцене. Немного изменив параметры команды, можно создавать такие эффекты, как дым, подводное окружение, сумерки и т.д. Другое очень важное применение команды тумана состоит в том, чтобы использовать ее для создания эффекта "скрывающейся геометрии". В насыщенной 3D-среде с большим количеством полигонов можно использовать туман, чтобы скрыть геометрию сцены за пределами максимального расстояния видимости камеры. Этот метод может значительно увеличить скорость выполнения программ.
Sync
On
Sync
Rate 30
Backdrop
on
Set
camera range 1,5000
Fog
on
Fog
distance 4000
Fog
color RGB(128,128,128)
Color
Backdrop RGB(128,128,128)
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
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)
Position
camera CameraX#,Y#+50,CameraZ#
Point
camera X#,Y#+25,Z#
Rem
Обновляем экран
Sync
Loop
Начнем объяснение с нескольких установочных команд.
Backdrop
on
Команда "Backdrop on" включает задник. Если он выключен, вы увидите эффект зеркального помещения, выражающийся в том, что можно перемещаться за пределами матрицы, но объект-игрок не сможет подбирать или удалять находившиеся там прежде предметы. Задник необходимо использовать в том случае, если вы знаете, что игроку будет виден задний план.
Set camera range 1,5000
Команда "Set Camera Range" устанавливает дальность видимого пространства для камеры. Первый параметр определяет, на каком расстоянии от камеры DarkBASIC должен начать рендеринг 3D-сцены. Второй параметр определяет расстояние от камеры, на котором прекращается рендеринг сцены. При выборе значения последнего параметра необходимо принять во внимание то, насколько далеко будет "видеть" игрок, и какое число полигонов будет одновременно отображаться. Попробуйте изменить значение первого параметра на 1000, а второго - на 100000 или 1000 и посмотреть, как это повлияет на рендеринг сцены.
Fog on
Команда "Fog On" указывает DarkBASIC, что на определенном расстоянии в сцене будет использоваться туман.
Fog distance 4000
Команда "Fog Distance" устанавливает расстояние, с которого должен начинаться наиболее плотный туман. Советуем установить этот параметр равным или чуть меньшим, чем последний параметр в команде "Set Camera Range", в противном случае вам придется наблюдать неприятный эффект обрезанных полигонов.
Fog color RGB(128,128,128)
Команда "Fog Color" устанавливает цвет тумана. Параметр после команды - цвет тумана. Здесь для установки цвета мы используем команду "RGB".
Color Backdrop RGB(128,128,128)
Команда "Color Backdrop" устанавливает цвет задника. Параметр после команды - цвет задника. Так же, как и в предыдущей команде, для установки цвета задника мы используем команду "RGB". Чтобы туман выглядел более реалистичным, советуем окрасить задник в тот же цвет, что и туман. В этом случае туман сольется с задником. Для создания других эффектов можно установить различные значения этих цветов. Попробуйте задать расстояние для тумана равным 500, установить значение цвета тумана равным "0,0,0", а цвета задника равным "0,0,32". Это создаст эффект вырисовывающегося ландшафта на фоне почти черного неба.
В конце концов у вас должно получиться
следующее.
Это интересно...
Продолжаю знакомить вас с лучшими ОТЕЧЕСТВЕННЫМИ разработками.
На очереди программа, название которой, говорит само за себя - "Адресная книга"...
|
Простая и интуитивно понятная программа для хранения контактной информации (адресов, телефонов, заметок и пр.).
Позволяет быстро находить нужную информацию.
Умеет набирать телефонные номера, запускать браузер и почтовую программу.
Содержит встроенный планировщик/напоминальник.
Умеет экспортировать и импортировать данные в наиболее распространенные форматы.
Содержит средства резервного копирования, восстановления и синхронизации наборов данных.
Ведет историю исходящих звонков, создания почтовых сообщений, переходов по ссылкам.
В общем, достаточно простой, но удобный органайзер.
|
Кратко и ясно. Больше добавить нечего. Ну разве скажу, что
подобных программ я испробовал множество. Но лучше этой не нашел!
В ней я веду и телефонную книжку (по совместительству она же и адресная + всякие
web-странички и e-mail-ы), и пользуюсь напоминателем (дни рождения, праздники и все такое
прочее), и запуском программ по расписанию (проверка диска, дефрагментация,
резервное копирование и прочее). Вот такая она - маленькая, чуть больше 400 килобайт,
да удаленькая! Кроме всего - она абсолютно бесплатная!
|
Выпуск закончил 20 августа 2002 года в 11:02 мск