Главная
Новости
Статьи и обзоры
Горожанин
Обнинск в Internet
Web Design
Hardware
Software
Безопасность
Серфинг
Игродром
Relax
Технологии
Web-обзор
Интернет-ликбез
Опросник
УП-Технологии
ART.net
Ссылки
Архив
О нас
Контакты
Форумы
Основатель: К.Николаенко
Главный Редактор: С.Коротков
Web Design: Neutron
|
|
= Технологии =
"БЛИЦ" ТРЕХМЕРНОГО МИРА
© Сергей Лосев
Продолжение: начало в №№ 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
Продолжение следует.
|
|