Читаем Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода полностью

            status = Motion

        elif status == Hierarchy:

            if key == 'ROOT':

                node = CNode(words, None)

                root = node

                nodes = [root]

            elif key == 'JOINT':

                node = CNode(words, node)

                nodes.append(node)

            elif key == 'OFFSET':

                (x,y,z) = (float(words[1]), float(words[2]), float(words[3]))

                if rot90:

                    node.offset = scale*Vector((x,-z,y))

                else:

                    node.offset = scale*Vector((x,y,z))

            elif key == 'END':

                node = CNode(words, node)

            elif key == 'CHANNELS':

                oldmode = None

                for word in words[2:]:

                    if rot90:

                        (index, mode, sign) = channelZup(word)

                    else:

                        (index, mode, sign) = channelYup(word)

                    if mode != oldmode:

                        indices = []

                        node.channels.append((mode, indices))

                        oldmode = mode

                    indices.append((index, sign))

            elif key == '{':

                level += 1

            elif key == '}':

                level -= 1

                node = node.parent

            else:

                raise NameError("Did not expect %s" % words[0])

        elif status == Motion:

            if key == 'FRAMES:':

                nFrames = int(words[1])

            elif key == 'FRAME' and words[1].upper == 'TIME:':

                frameTime = float(words[2])

                frameTime = 1

                status = Frames

                frame = 0

                t = 0

                bpy.ops.object.mode_set(mode='POSE')

                pbones = rig.pose.bones

                for pb in pbones:

                    pb.rotation_mode = 'QUATERNION'

        elif status == Frames:

            addFrame(words, frame, nodes, pbones, scale)

            t += frameTime

            frame += 1


    fp.close

    time2 = time.clock

    print("Bvh file loaded in %.3f s" % (time2-time1))

    return rig 


#

# channelYup(word):

# channelZup(word):


def channelYup(word):

    if word == 'Xrotation':

        return ('X', Rotation, +1)

    elif word == 'Yrotation':

        return ('Y', Rotation, +1)

    elif word == 'Zrotation':

        return ('Z', Rotation, +1)

    elif word == 'Xposition':

        return (0, Location, +1)

    elif word == 'Yposition':

        return (1, Location, +1)

    elif word == 'Zposition':

        return (2, Location, +1)  


def channelZup(word):

    if word == 'Xrotation':

        return ('X', Rotation, +1)

    elif word == 'Yrotation':

        return ('Z', Rotation, +1)

    elif word == 'Zrotation':

        return ('Y', Rotation, -1)

    elif word == 'Xposition':

        return (0, Location, +1)

    elif word == 'Yposition':

        return (2, Location, +1)

    elif word == 'Zposition':

        return (1, Location, -1)  


#

# addFrame(words, frame, nodes, pbones, scale):


def addFrame(words, frame, nodes, pbones, scale):

    m = 0

    for node in nodes:

        name = node.name

        try:

            pb = pbones[name]

        except:

            pb = None

        if pb:

            for (mode, indices) in node.channels:

                if mode == Location:

                    vec = Vector((0,0,0))

                    for (index, sign) in indices:

                        vec[index] = sign*float(words[m])

                        m += 1

                    pb.location = (scale * vec - node.head) * node.inverse

                    for n in range(3):

                        pb.keyframe_insert('location', index=n, frame=frame, group=name)

                elif mode == Rotation:

                    mats = []

                    for (axis, sign) in indices:

                        angle = sign*float(words[m])*Deg2Rad

Перейти на страницу:

Похожие книги

Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT