Создание и редактирование объектов в Blitz3D
[ Поделиться ]
[ Спасибо! ]
|
;Создаем камеру
camera=CreateCamera()
Область обзора камеры: Камера должна знать, где на экране 3D мир должен быть виден. Эта область экрана известна как область просмотра камеры. По умолчанию, область просмотра камеры установлена по всему экрану.Для изменения области просмотра камеры используйте команду CameraViewport:
; Устанавливаем камеру в верхнем левом углу экрана
CameraViewport
camera,0,0,GraphicsWidth()/2,GraphicsHeight()/2
Диапозон обзора камеры: Диапазон обзора камеры определяет, как далеко камера может "видеть". Вы определяете два значения для диапазона обзора камеры - "близкое" и "далекое" значение. Хорошая идея использовать "близкое" значение настолько большое, насколько возможно, и "дальнее" значение настолько маленькое, насколько возможно. Это помогает минимизировать проблемы z - буфера подобные "jaggies". По умолчанию, близкое значение для камеры 1, и дальнее значение - 1000. Для изменения диапазона камеры используйте команду CameraRange:
; Устанавливаем близкое значение 5 и дальнее значение 5000
CameraRange camera,5,5000
Изменение масштабирования камеры: Изменение масштабирования камеры, позволяет Вам увеличивать или уменьшать камерой изображение мира. По умолчанию значение камеры равно 1. Изменение масштаба на значение большее чем 1, вызовет эффект увеличения, в то время как изменение масштаба на значение меньше чем 1, вызовет уменьшение. Масштабирование никогда не должно равняться 0 или быть меньше 0. Команда CameraZoom контролирует масштаб изображения:
; Немного увеличим масштаб
CameraZoom camera,1.5
Создание тумана: Blitz3D позволяет Вам устанавливать эффект тумана. Туман можно использовать как визуальный эффект атмосферы. Туман может быть полезен для ограничения видимого пространства, что позволит Вам экономить ресурсы компьютера. Часто диапазон тумана и диапазон камеры будут совпадать.Для настройки эффекта тумана Вы можете использовать следующие операторы:
; Устанавливаем цвет тумана для камеры.
CameraFogColor camera,0,128,255
; Устанавливаем дистанцию тумана для камеры.
CameraFogRange camera,1,1000
; Устанавливаем режим тумана для данной камеры.
CameraFogMode camera,1
Создание и редактирование объекта Плоскость Плоскости - простой способ добавить большие, плоские поверхности в Ваш мир. Плоскости полезны для таких вещей как земля, море, небо, облака и так далее. Создание плоскости: Как создать плоскость? Легко, используя оператор CreatePlane:
; Создаем плоскость
plane=CreatePlane()
Управление плоскостью: По умолчанию, плоскость имеет координаты x = 0, y = 0, z = 0. Вы можете перемещать, вращать и масштабировать плоскости. Чтобы делать это Вы должны использовать стандартные команды.
; Создайте плоскость для облаков
plane=CreatePlane()
; Поверните плоскость так, чтобы она смотрела вниз
RotateEntity clouds,0,0,180
; Переместите плоскость вверх к небу
PositionEntity clouds,0,100,0
Имея плоскость, представляющую собой небо, как мы можем заставить её реалистично выглядеть? Очень просто - затекстуировать её. Вы узнаете как текстуировать объекты чуть позже. Если Вы были внимательны, рассматривая большинство примеров, Вы обратили внимание, что большинство сцен неба содержит больше чем один уровень.
Обычно небо состоит из двух, трёх плоскостей. Самая верхняя плоскость содержит статические объекты типа Солнца, в то время как другая плоскость имеет вид облаков. Это может быть достигнуто, используя инструкцию BRUSHFX (чтобы сделать текстуру немного прозрачной) - вместе с анимированной текстурой, которая медленно перекручивает изображение.
В Blitz3D это возможно. Создание и редактирование объекта Ландшафт Объект ландшафт используется, чтобы выводить очень большие ландшафты, составленные из нескольких тысяч треугольников (полигонов). Ландшафты не требовательны к ресурсам компьютера благодаря методике Dynamic Level of Detail (динамический уровень детализации) чтобы ускорить процесс.
Это означает, что вместо того, чтобы выводить на экран все полигоны ландшафта, при удалении ландшафта используется меньшее число полигонов. Ландшафты имеют несколько ограничений:
1) Вершины ландшафта располагаются в квадратном образце сетки.
2) Только высота вершин может изменяться.
3) Размер ландшафта должен быть кратен 2 - м, т.е: 2,4,8,16,32 ...
Создание ландшафтов: Вы можете создавать ландшафты, загружая карту из файла, или создать "пустой" ландшафт и установить высоту каждой вершины самостоятельно. Изображение карты - просто серое (grayscale) изображение, где черные пиксели представляют низкие вершины, а белые пиксели представляют высокие вершины. Изображение карты должно совпадать с размером ландшафта - то есть: квадрат, и кратная 2 длина / ширина. Когда ландшафт создан, ширина и длина изображаемого пространства - такая же как размер ландшафта, высота по умолчанию равна 1. Например, если Вы создаете ландшафт:
terrain=CreateTerrain( 32 )
Ландшафт будет простираться от 0 до 32 по оси x и z , и от 0 до 1 по оси y. Однако, Вы сами можете перемещать и масштабировать ландшафт, поскольку у Вас есть команды манипулирования объектами, типа ScaleEntity, PositionEntity. Например:
; Создаём ландшафт 32 x 1 x 32
terrain=CreateTerrain( 32 )
; Мосштабируем ландшафт 320 x 100 x 320
ScaleEntity terrain,10,100,10
; Перемещаем ландшафт
PositionEntity terrain,-160,0,-160
Уровень детализации ландшафта: Вы можете установить уровень детализации ландшафта - количество используемых полигонов, используя команду TerrainDetail. Использование малого количества полигонов естественно отразится на повышении быстродействия. Использование большого количества полигонов приведёт к более реалистичной детализации ландшафта, но будет сильно влиять на быстродействие. Так, какое число полигонов нужно использовать? Это выясняется методом проб и ошибок и зависит от ряда факторов:
1) Сложность ландшафта.
2) Масштаб ландшафта.
3) Диапазон камеры. Вы можете уменьшить число полигонов, необходимых для представления ландшафта, используя следующие приемы:
1) "Размойте" изображение ландшафта. Например, если Вы используете изображение карты, примените к ней "размывающий" фильтр или эквивалент.
2) Уменьшите диапазон камеры. Blitz3D также обеспечивает методику, называемую vertex morphing, Она позволяет преобразовать ландшафт в более плоский это позволяет уменьшить количество полигонов. Команда TerrainDetail также используется для включения метода vertex morphing. Изменение ландшафта: Команда ModifyTerrain используется для изменения высоты (т.е. координату Y) вершин ландшафта, например:
; Создаём ландшафт 32 х 1 х 32
terrain=CreateTerrain( 32 )
; Изменяем высоту центральной вершины
ModifyTerrain terrain,16,16,.5
Параметры, используемые с ModifyTerrain должны быть заданы в ландшафтных координатах. Текстуирование ландшафта: По умолчанию ландшафт, который Вы создаете, будет серого цвета, но используя команду EntityTexture можно применить к ландшафту текстуру.
К сожалению, пока невозможно текстуировать различные части ландшафта различными текстурами. Создание и редактирование 3D - объектов 3D - объекты составлены из вершин и полигонов и могут быть или загружены из файла (возможно сделать в 3D - редакте, типа 3D Studio MAX), или сформирован вручную (возможно сделать в программе Blitz3D в реальном времени).
Загрузка 3D - объекта: Имеются две команды, предусмотренные для загрузки 3D - объектов - LoadMesh и LoadAnimMesh, обе из которых загружают . X или . 3DS файлы. Так, в чем же различие? Модели, сохраненные в файлах обычно состоят из нескольких частей. В случае модели человека, эти части могут представлять руки, ноги и т. д. Кроме того, файлы также могут содержать информацию о анимации через команду LoadAnimMesh. Следовательно, оператор LoadAnimMesh загружает анимацию 3D - объектов.
Если Вы не нуждаетесь в анимировании модели, Вы можете использовать оператор LoadMesh вместо этого. Если Вы не планируете оживлять 3D - объекты используйте LoadMesh. Создание 3D - объекта: Перед рассмотрением создания 3D - объекта, Вам нужно знать о кистях в Blitz3D. Кисть - совокупность свойств, используемых при прорисовке полигонов 3D - объекта. Эти свойства: Color - цвет прорисовки полигона. Texture - от 0 до 8 текстур может использоваться при прорисовке модели.
Alpha - параметр определяет насколько прозрачен будет полигон. Альфа может располагаться от 0 (полностью прозрачный) до 1 (полностью непрозрачный). Shininess - параметр определяет насколько освещен будет полигон. Это значение может располагаться от 0 (неосвещенный) до 1 (освещенный). Blend - режим смешивания при прорисовке полигона. Режим смешивания описывает, как полигон объединен с тем, который уже находиться на экране. FX - специальные эффекты прорисовки. Чтобы создать кисть, используйте команду CreateBrush:
; Создаем кисть.
brush=CreateBrush()
Как только Вы получили кисть, Вы можете устанавить свойства кисти:
; Красная кисть.
BrushColor brush,255,255,0
; Красная кисть освещения.
BrushShininess brush,1
3D - объекты фактически сделаны из поверхностей (Surface), и уже поверхности составлены из вершин и полигонов. Когда поверхность создана, Вы устанавливаете кисть, которая управляет всеми полигонами прорисовываемой поверхности. Итак, короткий обзор:
1) 3D - объект состоитн из любого числа поверхностей.
2) Каждая поверхность в 3D - объекте содержит любое количество вершин и полигонов.
3) Все полигоны в поверхности прорисовываются с использованием общей кисти. Попробуем создать простой 3D - объект:
brush=CreateBrush()
; Создаём кисть
BrushColor brush,255,0,0 ; Красная кисть
mesh=CreateMesh() ; Создаём 3D - объект
surf=CreateSurface( mesh,brush)
; Создаём поверхность
AddVertex surf,-1,1,0 ; Добавляем 4 вершины
AddVertex surf,1,1,0
AddVertex surf,1-,1,0
AddVertex surf,-1,-1,0
AddTriangle surf,0,1,2 ; Добавляем 2 полигона
AddTriangle surf,0,2,3
UpdateNormals mesh
Этот программный код создаст простой красный квадрат. Каково предназначение команды UpdateNormals (в конце программы)? Она предназначена для того чтобы Ваш 3D - объект был правильно освещен, для этого вершины должны быть вычислены. Оператор UpdateNormals сделает это за Вас.
Если Вы знаете, как работают нормали, Вы можете устанавливать Ваши собственные вершины используя команду VertexNormal. Если нет, не забывайте приписать команду UpdateNormals в конце любых модификаций, которые Вы делаете, в противном случае Ваши 3D - объекты будут неправильно освещены. Обратите внимание, что Вы можете создавать любое число поверхностей. Изменение 3D - объектов: Как только Вы создали 3D - объект, имеются различные команды, доступные для изменения 3D - объекта в реальном времени.
Они могут использоваться, чтобы создать специальные эффекты типа развивающихся флагов, слегка колеблющейся воды и т. д. Ниже перечислены эти команды: VertexCoords - изменяет координаты вершин
VertexColor - изменяет цвет вершин
VertexTexCoords - изменяет координаты текстур
VertexNormal - изменяет нормали вершин Создание и редактирование текстур Текстуры - специальные растровые изображения, которые накладываются на лицевую часть полигонов, для более высокой детализации. Текстуры могут быть созданы вручную или загружены из файла изображения. Параметры текстуры: Когда текстура создана, значения параметров текстур позволяют указать тип текстуры, которую Вы будете использовать. Имеются несколько значений параметров текстур: 1 : текстура имеет цветовой параметр
2 : текстура имеет alpha параметр
4 : маскируемая текстура, т. е. чёрные пиксели прозрачны
8 : текстура наносится с помощью mipmapped метода
6 : текстура горизонтально сжата
32 : текстура вертикалбно сжата
64 : текстура в виде сферической карты среды Параметры текстуры могут использоваться вместе, чтобы объединить эффекты отдельных параметров. Например, значение параметра текстуры 3 указывает, что будет использоваться текстура с несколькими цветами и alpha параметром. Если используется параметр маски, цветные и alpha параметры игнорируются. Создание текстур: Вы можете создать текстуру или загрузить текстуру из файла изображения. Загрузить текстуру из файла очень просто: texture=LoadTexture( "texture.jpg",3 ) Обратите внимание на значение параметра текстуры 3. Это указывает на то, что мы хотим, чтобы текстура содержала и цветовой и alpha параметры. Однако, . JPG формат не поддерживает alpha параметр. Однако и PNG и TGA форматы поддерживают alpha параметр и Blitz3D использует этот параметр если он присутствует. Чтобы создать текстуру вручную, используйте команду CreateTexture.
; создаем текстуру 256 x 256
texture=CreateTexture( 256,256,0 )
; находим высоту текстуры
width=TextureWidth( texture )
; находим ширину текстуры
height=TextureHeight( texture )
Почему мы ищем размер текстуры, когда мы уже сообщили Blitz3D, какой размер текстуры мы хотим? Это потому что все графические 3D платы имеют ограничения размера текстуры, которую они могут обрабатывать. Обычно, ширина и высота текстуры должна быть кратны двум (например: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ...) и в некоторых случаях должен иметь размер не больший чем 256 х 256. Имеются также слухи, что некоторые платы могут обрабатывать только квадратные текстуры - есть вероятность столкнутся с таким эффектом.
Размер текстуры, где ширина и высота является кратной двум и меньше либо равна 256, гарантировано будет поддержана Вашей платой - но никогда не вредно проверять. Если выбранный Вами размер текстуры не поддерживается Вашей графической платой, Blitz3D сам выберет нужный размер. Ладно, теперь, когда мы создали нашу текстуру, мы должны нарисовать что - нибудь на ней:
; устанавливаем буфер для текстуры
SetBuffer TextureBuffer( texture )
; устанавливаем cls - цвет красным
ClsColor 255,0,0
; заливаем текстуру красным цветом
Cls
; танавливаем голубой цвет для рисования
Color 0,0,255
; рисуем овал голубого цвета
Oval 0,0,width,height
; возвращаемся к буферу
SetBuffer BackBuffer()
В заключение, когда Вы закончили с текстурой, используйте FreeTexture, чтобы удалить её. Анимация текстур: ScaleTexture, RotateTexture и PositionTexture могут использоваться, чтобы оживить текстуры. Например чтобы заставить текстуру прокрутиться, Вы могли бы использовать команды:
texture_x#=texture_x#+.1
; добавим 1 к координате Х
PositionTexture texture,texture_x#,0
; указываем позицию текстуры в Вашем основном цикле.
Вы можете динамически масштабировать и вращать текстуры подобным способом. Мультитекстуирование: Blitz3D позволяет Вам присваивать восемь текстур к одному полигону, этот метод известен как Multitexturing. Если Вы используете EntityTexture или команды BrushTexture, необязательный индексный параметр позволяет Вам управлять, какую из 8 текстур Вы устанавливаете.
Категория: Blitz 3D |
Просмотров: 5401 |
Добавил: ДядяВолк (11.08.2010)
| Рейтинг: 0.0/0
Источник: http://quadrathell.cn.ua | |
HTML ссылка на материал: BB ссылка на материал: |
Всего комментариев: 0 | |