среда, 7 января 2009 г.

Пример 1.3: Загрузка модели и ее непрерывная анимация

В данном примере мы продолжим рехтовать код предидущих наработок по рендеру сцены и вращению камеры. Результатом проделанной работы в данном случае будет присутсвие на сцене маленькой анимированной панды.

Для начала в строку импортирования библиотек добавим строку:

from direct.actor import Actor

Тем самым мы добавили класс "Actor", который отвечает за создание на сцене персонажа, манипулирование им, а также его анимацию. Результирующий код импорта:

#importing part
import direct.directbase.DirectStart
from direct.actor import Actor
from direct.task import Task
import math


После строки: "taskMgr.add(SpinCameraTask, "SpinCameraTask")" добавляем код:

#Import Panda and its animation
panda = Actor.Actor("models/panda-model",{"walk":"models/panda-walk4"})
panda.setScale(0.005,0.005,0.005)
panda.reparentTo(render)
panda.loop("walk")

Первая строка как и полагается - комментарии к даннобу блоку кода.

Следующие строки отвечают за приминение класса "Actor" для рендера на сцене модели панды Actor.Actor("models/panda-model". Код {"walk":"models/panda-walk4"} отвечает за использование анимации для модели. 

Если помните, в первом примере для создания сцены мы использовали команду loader.loadModel. Разница состоит в том, что класс "Actor" применяется для динамических объектов, а класс "Loader" - статических.

Строка panda.setScale(0.005,0.005,0.005) задает параметры отображения модели. К примеру, изменив значения параметра по оси х до 0.015 мы получим "черепахоподобную" панду :).

Значение 3й строки вы уже должна знать (см. пример 1.1), а четвертая попросту отвечает за непрерывное выполнение анимации модели.

В конечном итога в окне рендера должно быть что то похожее на этот скриншот :


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

#importing part
import direct.directbase.DirectStart
from direct.actor import Actor
from direct.task import Task
import math


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

#Task to move the camera
def SpinCameraTask(task):
  angledegrees = task.time * 6.0
  angleradians = angledegrees * (math.pi / 180.0)
  base.camera.setPos(20*math.sin(angleradians),-20.0*math.cos(angleradians),3)
  base.camera.setHpr(angledegrees, 0, 0)
  return Task.cont

taskMgr.add(SpinCameraTask, "SpinCameraTask")

#Import Panda and its animation
panda = Actor.Actor("models/panda-model",{"walk":"models/panda-walk4"})
panda.setScale(0.005,0.005,0.005)
panda.reparentTo(render)
panda.loop("walk")


#Run the tutorial
run()


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

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