четверг, 21 июня 2012 г.

Простейшая программа на Blitz3D

Сегодня решил вам продемонстрировать простоту использования и возможности среды разработки Blitz3D.
Как и BlitzMax, Blitz3D имеет собственный, basic-подобный язык программирования. В целом, ЯП в BlitzMax и Blitz3D практически одинаковые, однако BlitzMax имеет полноценное ООП, в то время, как Blitz3D поддерживает только типы (в них даже нельзя добавить методы). Однако, в отличие от BlitzMax, Blitz3D гораздо более прост в работе с трёхмерными приложениями.

Для начала инициализируем графику.
Graphics3D 1024,768,32,2
1024,768 - разрешение экрана. 32 - глубина цветовой гаммы. 2 - этим параметром мы сообщаем, что хотим запустить игру в окне.

Добавим ещё одну строку:
SetBuffer BackBuffer()
Этой строкой мы сообщили программе, что используем двойной буффер для вывода изображения на экран. Также есть FrontBuffer(), однако, при его использовании, изображение становится "дерганное". Чтобы отобразить изображение, когда используется BackBuffer(), надо в основном цикле программы добавить команду Flip (перевернуть). Не буду углубляться в тему буфферов, однако, если вам интересно, в интернете полно информации.

Теперь добавим основной цикл.

Repeat

until keyhit(1)

end

Repeat ... Until keyhit(1) - цикл, который будет постоянно выполняться до того момента, как пользователь нажмёт клавишу Escape. 1 - код клавиши escape. Остальные коды клавиш можно посмотреть в справочнике блитца.

Команда end - завершает программу. Можно было обойтись без неё, однако, в этом случае, будет выскакивать сообщение о том, что окончился код программы.

Можно запустить программу, однако кроме черного экрана мы ничего не увидим.

Код программы:
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()


repeat


until keyhit(1)


end


Немного улучшим нашу программу. Отобразим на экране трёхмерный куб. Для этого, перед началом основного цикла добавим команды:


Global camera = CreateCamera()     ;Создаём камеру, чтобы видеть все отрисованные объекты.
Global light = CreateLight()              ;Создаём свет, а то в темноте ничего не увидишь.
Global mesh = CreateCube()            ;Создаём куб. Он автоматически располагается в точке 0,0,0.
PositionEntity mesh,0,0,5                  ;Меняем позицию куба, чтобы мы могли его увидеть, так как камера, как и куб, при инициализации по-стандартному находятся в точке 0,0,0.
Слово Global перед именами переменных обозначает, что они видны во всей программе, в отличие от локальных, которые видны только в одной функции, цикле и т.д.

В основной цикл добавим строчки:

UpdateWorld
RenderWorld
Flip

Команды UpdateWorld и RenderWorld постоянно обновляют анимацию и выводят изображение в буффер. Flip - переворачивает буффер и выводит изображение на экран.

Запустив программу, вы увидите здоровенный белый квадрат. Уже хорошо :)
Однако, есть ощущение, что это 2D изображение. В следующем туториале мы это исправим.



Исходный код программы:

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()


Global camera = CreateCamera()
Global light = CreateLight()
Global mesh = CreateCube()
PositionEntity mesh,0,0,5


Repeat


UpdateWorld()
RenderWorld()
Flip()


Until KeyHit(1)


End



Комментариев нет:

Отправить комментарий