вторник, 6 января 2009 г.

Пример 1.1: Первая программа на Python+Panda3D

Как заведено во всех учебниках по программированию, первые главы посвящены неким "Hello world" программам. Я считаю это вполне хорошей точкой для старта работ над Panda3D.

Данный урок позволит нам немного ознакомится с Panda3D API. В конечном результате наша цель - создать небольшую сценку.

В колонках "мягко" играет Disturbed - что ж, приступим :)

Для начала создадим новый файл в выбранном IDE. В нашем случае это Notepad++. 

Необходимо прежде всего выставить синтаксис данного документа (Python) и сохранить данный файл.

Для работоспособности кода и корректного рендера объектов следует располагать ресурсы, которые буду использовать при рендере в той же директории что и файл с кодом (например папка models должна располагаться по адресу "адрес файла/models" и т.д.).

Далее вводим следующй код :

import direct.directbase.DirectStart
run()


DirectStart загружает большинство модулей Panda3D , а также загружает окно 3D-рендеринга . Так как никаких операций еще не проводилось, то результатом наших стараний пока что является появившееся окно рендеринга с серым фоном. При это стоит помнить, что функция "run()" размещается в конце програмного кода, запуская его в действие.

ВНИМАНИЕ, PYTHON ЧУВСТВИТЕЛЕН К РЕГИСТРУ!!!! DirectStart И directstart - НЕ ОДНО И ТО ЖЕ!!!!!

После успешного запуска рендер-окна, модифицируем наш код и добавляем в него следующее:

#Load the first environment model
environ = loader.loadModel("models/environment")
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,0)
#Run the tutorial

Теперь наш программный код принимает вид:

import direct.directbase.DirectStart

#Load the first environment model
environ = loader.loadModel("models/environment")
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,0)
#Run the tutorial
run()

Теперь разберемся, что здесь нового и что означает каждый элемент.

# - закомментированная строка. Это очень удобно в процессе написания кода (закомментировать строку) для того чтобы, например, разделить сегменты в документе и т.д.

Команда loader.loadModel() - загружает определенный файл, в данном случае это environment.egg в папке models (в корневой директории движка). Это сцена, содержашая лужайку и несколько булыжников :). Тут стоит отметить что синтакс определения пути к файлу указывается через "/". Panda3D присуща определенная иерархия или, если хотите, структура, на вершине которой стоит объект "render". До тех пор пока данный объект не определен при создании сцены, на экране ее отображение будет отсутствовать.        

Методом reparentTo  мы устанавливаем модель травы на рендер-пространстве. При использовании данного метода мы определяем данный объект "parent"-градацией, предоставляя объекту место в координатных плокостях.

В конце концов мы задаем параметры координат setPos  и размерные параметры setScale.

Так как движок имеет трехмерную систему измерения то задаются параметры расположения по осям - x, y, z и параметры длины, ширины и высоты соответственно.

Итак, если все было сделано верно на выходе мы получим рендер сцены:


По умолчанию в Panda3D встроена камера и управление ею. В следующем примере мы рассмотрим вращение камеры на данной сцене.

С уважением, Dredd.

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

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