Главная » Статьи » Учебник: теория

Загрузка моделей
Загрузка статики

    Загрузка статической модели в Панде осуществляется процедурой loader.loadModel

m = loader.loadModel('mymodel.egg')

Путь к модели может быть как абсолютным, так и относительным. Если используется относительный путь, то панда будет искать модели относительно model path, прописанного в конфигурационном файле.
    Не забывайте, что загрузка модели сама по себе не сделает модель видимой, для этого её нужно поместить в граф сцены

m.reparentTo(render)

    О графе сцены вы может прочесть больше в соответствующей главе учебника
Синтаксис имени файла
    В целях лучшей переносимости программ на разные системы - *nix, Windows, Mac - панда  использует соглашение по которому все имена и пути файлов пишутся в стиле Unix. Это означает, что все слеши являются прямыми и отсутствует префикс диска (для указания диска используется лидирующий однобуквенный каталог).
    Пример конвертации пути Windows в путь, воспринимаемый Пандой:

# НЕВЕРНО:
loader.loadModel("c:\\Program Files\\My Game\\Models\\Model1.egg")

# ВЕРНО:
loader.loadModel("/c/Program Files/My Game/Models/Model1.egg")


    Панда использует класс Filename для хранения имени файла в своём стиле. Многие функции ожидают в качестве передаваемого параметра объект типа Filename. Этот класс так же содержит некоторые дополнительные методы, позволяющие манипулировать путями и получать доступ к файлам. Для полной информации нужно заглянуть в справочник API функций панды.
Примеры преобразования с помощью класса Filename:

from pandac.PandaModules import Filename
winfile = "c:\\MyGame\\Model1.egg"
pandafile = Filename.fromOsSpecific(winfile)
print pandafile

from pandac.PandaModules import Filename
pandafile = Filename("/c/MyGame/Model1.egg")
winfile = pandafile.toOsSpecific()
print winfile

    Класс Filename может быть использован совместно со встроенными в питон механизмами работы с файлами. Скажем, вы хотите загрузить модель, находящуюся в директории models? Которая в свою очередь находится там же, где и основной исполняемый файл:
import sys,os
from pandac.PandaModules import Filename

# получаем путь к основному файлу скрипта:
mydir = os.path.abspath(sys.path[0])

# конвертируем в соответствии с требованиями панды
mydir = Filename.fromOsSpecific(mydir).getFullpath()

# и загружаем модель
model = loader.loadModel(mydir + "/models/mymodel.egg")



    Помните, что стандартные функции питона (например os.remove()) работают с путями, характерными для операционной системы. Не забывайте конвертировать пути при использовании встроенных функций питона.

Загрузка анимированных моделей

     Класс Actor предназначен для хранения анимированных моделей и анимаций.  Actor наследует свойства NodePath, все методы NodePath применимы к классу Actor.
   Замечание - Actor класс питона, расширяющий C++ класс NodePath. Обычно он выполняет то, что вы ожидали. Однако, есть несколько нюансов. Когда вы прикрепляете актёра к графу сцены, изкоуровневая C++ панда создаёт только запись NodePath в графе сцены, который существует до тех пор пока вы храните указатель на актёра в объектах питона. Если вы разрушите актёра — то всего лишь прекратится его анимация (т. к. это больше не актёр), а видимая геометрия останется. Кроме того, даже если у вас есть объект  типа Актёр и вы получите новый указатель на него из графа сцены (например при коллизиях), то это будет обычный указатель на NodePath, а не на актёра.
    Actor предоставляет высокоуровневый интерфейс к низкоуровневым конструкциям панды. В панде низкоуровневый узел (нод), выполняющий анимацию называется Character. Вы можете увидеть Character node в графе сцены вызвав actor.ls().
    Не путайте класс Actor с классом ActorNode,который используется в физике. Это полностью разные классы с различными именами.
   Перед любыми действиями мы должны импортировать модуль

from direct.actor.Actor import Actor

Как только модуль загружен, мы можем работать с моделью и анимацией:

nodePath = Actor()
nodePath.loadModel(‘Model Path’)
nodePath.loadAnims({‘Arbitrary Name1’:’Animation Path 1’})
nodePath.loadAnims({‘Arbitrary Name2’:’Animation Path 2’})


Загрузка каждой анимации требует кортеж, состоящий из имени анимации и имени файла анимации. Предыдущая операция может быть выполнена одной строкой:
 
nodePath = Actor('Model Path', {
  'Animation Name 1':'Animation Path 1',
  'Animation Name 2':'Animation Path 2',
})

Анимация так же может быть выгружена, используя такой же кортеж как и при загрузке.

nodePath.unloadAnims({'Animation Name':'Animation Path'})

Хотя это редко используемая техника, но есть возможность загрузки актёра из нескольких частей — о чём будет рассказано в части учебника о составных актёрах.
Панда поддерживает как скелетную, так и вершинную анимацию (морфинг).
Категория: Учебник: теория | Добавил: ninth (28.01.2009)
Просмотров: 6722 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Онлайн всего: 18
Гостей: 18
Пользователей: 0