导出对象范围内的关键帧

2024-07-05 10:07:34 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以单独导出给定对象在其自己的关键帧范围内的关键帧?在

例如,camA的关键帧在第1帧到第10帧的范围内。但当我试图以另一种格式导出这台相机时,它考虑的是整个时间滑块。因此exported_camA在第1帧到第24帧的范围内设置关键帧(24是我的时间滑块的最大范围)

这有可能吗?我尝试过使用cmds.playbackOptions,但显然它也是根据时间滑块范围导出的

def __init__(self, transform, startAnimation, endAnimation, cameraObj):

    self.fileExport = []
    print ">>> Exported : %s" %self.fileExport

    mayaGlobal = OpenMaya.MGlobal()
    mayaGlobal.viewFrame(OpenMaya.MTime(1))

    for i in range(startAnimation, endAnimation):

        focalLength = cameraObj.focalLength()

        vFilmApp = cameraObj.verticalFilmAperture()

        focalOut = 2* math.degrees(math.atan(vFilmApp * 25.4/ (2* focalLength)))

        myEuler = OpenMaya.MEulerRotation()
        spc = OpenMaya.MSpace.kWorld

        trans = transform.getTranslation(spc)

        rotation = transform.getRotation(myEuler)
        rotVector = OpenMaya.MVector(myEuler.asVector())

        self.fileExport.append((str(i) + '\t' + str(trans[0]) + "\t" + str(trans[1]) + "\t" + str(trans[2]) + "\t" + str(math.degrees(rotVector[0])) + "\t" + str(math.degrees(rotVector[1])) + "\t" + str(math.degrees(rotVector[2])) + "\t" + str(focalOut) + "\n"))

        mayaGlobal.viewFrame(OpenMaya.MTime(i+1))

Tags: selftrans时间transformmath滑块degreesstr
2条回答

cmds中,您可以获得给定动画的最大和最小时间,如下所示:

key_times = cmds.keyframe('pCube1', attribute = 'translate',  q=True, tc=True)
first_key = key_times[0]
 last_key = key_times[-1]

请注意,这必须应用于特定属性(在本例中,我使用了“translate”),否则您将从Maya在对象上找到的第一条动画曲线中获取关键帧。在

也就是说,通常认为最好导出场景关键帧范围或显式设置的帧范围。否则,可能会有人在场景中工作并清理时间,然后导出并看到更少的帧。在

我还发现了这个命令-cmds.findKeyframe以便捕捉选定对象动画的关键帧,它也有助于我的代码

虽然我不确定这是否会在以后产生任何不良影响,因为我还没有遇到过一个:x

例如:

minTime = cmds.findKeyframe(which='first') # First keyframe
maxTime = cmds.findKeyframe(which='last')  # Last keyframe

相关问题 更多 >