Главная
Новости
Статьи и обзоры
Горожанин
Обнинск в Internet
Web Design
Hardware
Software
Безопасность
Серфинг
Игродром
Relax
Технологии
Web-обзор
Интернет-ликбез
Опросник
УП-Технологии
ART.net
Ссылки
Архив
О нас
Контакты
Форумы
Основатель: К.Николаенко
Главный Редактор: С.Коротков
Web Design: Neutron
|
|
= Технологии =
"БЛИЦ" ТРЕХМЕРНОГО МИРА
(с) Сергей Лосев
продолжение: начало в #9(157)
С САМОГО НАЧАЛА
Начнем же мы с азов. Немного о 3D-геометрии Blitz Basic. Базовые объекты создаются, как правило, единичной длины (загружаемые 3D-модели - в пропорции 1:1:1) в точке с координатами 0,0,0. Для экономии памяти многие объекты формируются из минимального количества полигонов. Скажем, объект Plane, который в Blitz Basic представляет собой бесконечный прямоугольник, состоит из двух огромных треугольников (использовать его можно самыми разными способами, например, для создания бесконечной равнины или океана). Впрочем, в аргументах функций CreateSphere(), CreatePlane() и др. можно увеличить число составляющих (для сферы - сегментов, для прямоугольника - тругольников и др.). Отображаются все созданные объекты по команде RenderWorld. Режимы рендеринга - сплошной и каркасный - переключаются инструкцией WireFrame. При этом она воздействует на всю сцену целиком, например:
If KeyHit ( 57 )=True Then enable=1-enable
WireFrame enable
Масштабирование объектов выполняет команда ScaleEntity (ScaleEntity sphere,0.5, 0.5, 0.5 - уменьшает объект в 2 раза по всем направлениям), абсолютное позиционирование - PositionEntity (PositionEntity sphere,1, 1, 1 - сфера перемещается в точку 1, 1, 1), а относительное - MoveEntity sphere, 1, 1, 1 - смещение сферы на 1 шаг по осям X, Y и Z). Замечу, что синтаксис этих команд совершенно одинаковый - в аргументах указывается ссылка на объект, а также три значения, которые масштабируют и перемещают объекты по осям X, Y и Z. Таким образом, в значительной степени упрощается разработка программм. Вывести и скрыть объект можно командами ShowEntity и HideEntity, а полностью удалить из памяти - FreeEntity (правилом хорошего тона является удаление всех созданных в программе объектов - не нужно надеяться на стандартные средства языка). Помимо этих базовых средств по управлению 3D-объектами, в Blitz Basic встроены и более изощренные функции, позволяющие, к примеру, преобразовывать координатные системы, работать с поверхностями и вертексами. К тому же объекты можно комбинировать, сочетать друг с другом, получая в итоге довольно интересные эффекты.
Попытаемся сделать на экране настоящий космос. Задача вполне по плечу Blitz Basic - вывести туманности и поверх них звезды довольно просто. Команд всего ничего - главное, представить, как это можно реализовать. Итак, наиболее очевидный способ таков: создаем сферы (внутреннюю и внешнюю), загружаем и масштабируем две текстуры (туманность - файл nebula.jpg и звезды stars.jpg), накладываем на сферы, а затем их масштабируем и "вписываем" внутрь сферы:
sphere=CreateSphere (8)
nebula=LoadTexture ("nebula.jpg")
EntityTexture sphere,nebula
ScaleEntity sphere, 1025, 1025, 1025
FlipMesh sphere
sphere=CreateSphere (8)
stars=LoadTexture ("stars.jpg")
ScaleTexture stars, 0.05, 0.05
EntityTexture sphere, stars
ScaleEntity sphere, 1024, 1024, 1024
FlipMesh sphere
EntityAlpha sphere, 0.6
"Покрутиться" вокруг звезд позволяет несложная функция MouseLook(), которая при перемещении мышки всего лишь поворачивает камеру по осям X и Y. Эту функцию следует вызывать в традиционном цикле Blitz Basic перед обновлением экрана командой RenderWorld.
Function MouseLook()
xspeed#=(MouseXSpeed()-xspeed) /12+x_speed
yspeed#=(MouseYSpeed()-yspeed) /12+y_speed
TurnEntity camera, yspeed*2, 0, 0, 0
TurnEntity camera, 0, -xspeed*2, 0, 1
MoveMouse GraphicsWidth() /2, GraphicsHeight() /2
End Function
Прежде чем делать что-то более серьезное (замечу, что Blitz Basic способен на демонстрацию не только сфер и кубов, но и сложных 3DS-моделей, он позволяет накладывать текстуры, а также управлять объектами на уровне поверхностей Sureface и вершин Vertex) и отображать ландшафты, нужна самая малость - создать камеру и осветить сцену.
Продолжение следует.
|
|