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

Главная

Новости

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

Ссылки

Архив

О нас

Контакты

Форумы


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

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

Web Design:
Neutron


Наш спонсор






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






Океан


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

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

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

© Сергей Лосев

Продолжение: начало в №№ 9(157), 10(158), 11(159)

ПОЛИГОНОВ МНОГО НЕ БЫВАЕТ

Blitz Basic поддерживает не только вывод простых объемных фигур типа сферы или куба (замечу, впрочем, что многие сцены нередко конструируются из них - скажем, такой элемент, как лестницу, вполне можно представить в виде набора определенным образом расставленных масштабированных кубиков, а простейшая звездная система, как вы уже могли убедиться, состоит из множества сфер), но и изощренные модели и анимацию, созданные художниками или дизайнерами в пакетах 3D-графики. Все эти объекты управляются одними и теми же командами: позиционируются в пространстве операторами PositionEntity и MoveEntity, вращаются по осям координат XYZ при помощи TurnEntity и RotateEntity, выводятся и скрываются по командам ShowEntity, HideEntity и т.д. Такая универсальность, без сомнения, упрощает разработку программ. В команде TurnEntity можно сослаться на сферу, загруженную из 3DS-файла модель космического корабля, камеру, источник освещения, невидимый pivot-элемент - во всех случаях объект поворачивается на заданный угол.
Говоря о невидимых объектах, нельзя не отметить, что нередко они играют значительную роль при создании сложных сцен. Зачем создавать лесную полянку, заботливо описывая каждый цветок? Куда проще ограничиться тремя-пятью растениями, а затем размножить их, добавив к базовому невидимому объекту: переместится он, переместится и вся полянка. Если его скрыть, цветы исчезнут. Вот, к примеру, как можно создать полянку из множества цветов. Сначала загружаем изображение цветов из 3DS-файла, а затем копируем их в массиве. В цикле задаются координаты цветов, а сами цветы добавляются к "невидимому" полю fieldpivot:

Flowers=LoadMesh ("flower.3ds")
Dim flowerfield (64)
Fieldpivot=CreatePivot ( )
PositionEntity fieldpivot, 0, 100, 5
For i=1 To 64
Floweritem ( i ) = CopyEntity (flowers)
PositionEntity floweritem ( i ), Rnd (25), Rnd 925), Rnd (25)
EntityParent floweritem ( i ), flowerpivot
Next

Полигональная графика, которая лежит в основе современных игр, немыслима без использования текстур - графических изображений, которые накладываются на 3D-объекты. Наиболее простой способ использования текстуры - загрузка ее из графического файла - рассматривался в предыдущей части. Но есть и другие способы - Blitz Basic позволяет программно генерировать несложные текстуры, смешивать несколько текстур и окрашивать объекты с помощью кистей.
При создании текстуры на лету используется т.н. текстурный буфер: функцией Createtexture ( ) резервируется необходимый объем памяти, а затем вызываются стандартные графические команды языка, такие, как Color, Rect, Oval и др. Поддерживается в Blitz Basic и мультитекстурирование - технология, позволяющая накладывать на один объект сразу несколько текстур. При этом в команде EntityTexture указывается номер слоя. Следующая программа показывает, как мультитекстурировать куб - на него накладывается сгенерированная в памяти текстура (четыре разноцветных квадрата) и текстура из файла texture.bmp:

; создаем текстуру в памяти
tex1=CreateTexture (64, 64, 0)
SetBuffer TextureBuffer (tex)
Color 255, 0, 0 : Rect 0, 0, 32, 32 : Rect 32, 32, 32, 32
Color 255, 128, 0 : Rect 32, 0, 32, 32 : Rect 0, 32, 32, 32
SetBuffer BackBuffer ( )
Color 255, 255, 255

; загружаем структуру из файла
rex2=LoadTexture ("texture.bmp", 64)

; создаем куб и накладываем
; на него две текстуры

cube=CreateCube ( )
EntityTexture cube, tex1, 0, 0
EntityTexture cube, tex2, 0, 0
UpdateNormals cube

Текстуры в Blitz Basic масштабируются и имеют т.н. UV-координаты. Масштабирование бывает необходимо в тех случаях, когда небольшое изображение накладывается на большой объект, скажем, если нужно создать видимость океана из двух бесконечных объектов Plane, то текстуру можно сделать и крупнее. А изменение UV-координат командой PositionTexture позволяет прокручивать текстуру, накладываемую на объект. Еще одна приятная особенность Blitz Basic - смешивание текстур. Конечно, все эти действия можно выполнять и вручную, благо что в системе есть возможность выводить изображение в текстурный буфер (о нем говорилось в предыдущей части), однако мультитекстурирование и смешивание вполне можно поручить DirectX и видеокарте - в современных графических адаптерах все эти возможности поддерживаются аппаратно. В программе же командой TextureBlend указывается лишь режим смешивания: multiply (параметр 2) или add (параметр 3) - при его изменении нет необходимости накладывать текстуру заново, объект обновляется автоматически при очередном RenderWorld.
Текстуры могут играть роль кистей, используемых при раскрашивании объектов. В самом простом случае кисти текстурируют объект (PaintEntity), но с помощью дополнительных команд (BrushFX) можно реализовать необычные эффекты, скажем, связанные с освещением. Создание и использование кистей - несложная операция: загружается текстура, создается кисть…, которая связывается с текстурой, после чего командами PaintEntity, PaintMesh или PaintSurface объект окрашивается.

Tex=LoadTexture ("texture.bmp")
Brush=CreateBrush ( )
BrushTexture brush, tex
Surf=GetSurface (surf, 1)
PaintSurface surf, brush

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


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