Еженедельник Свет в Интернет

Главная

Новости

Статьи и обзоры
  Горожанин
  Обнинск в Internet
  Web Design
  Hardware
  Software
  Безопасность
  Серфинг
  Игродром
  Relax
  Технологии
  Web-обзор
  Интернет-ликбез
  Опросник
  УП-Технологии
  ART.net

Ссылки

Архив

О нас

Контакты

Форумы


Основатель:
К.Николаенко

Главный Редактор:
С.Коротков

Web Design:
Neutron


Наш спонсор






Порт POPULAR.RU
POPULAR.RU RegionalBanner Network.






Океан


НПП Метра - промышленные электронные автомобильные вагонные весы
Goldy Interior - салон офисной мебели: кабинеты руководителей, мебель для персонала

= Технологии =

"БЛИЦ" ТРЕХМЕРНОГО МИРА

(с) Сергей Лосев

продолжение: начало в #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) и отображать ландшафты, нужна самая малость - создать камеру и осветить сцену.

Продолжение следует.


Copyright © Свет в Internet   Designed by Свет в Internet