You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Blender Python API在K帧内围绕未知边界框的OBJ模型旋转相机

Got it, let's walk through exactly how to do this with Blender's Python API. I'll break it down step by step so you can follow along easily, with full code and explanations:

使用Blender Python API实现相机围绕OBJ模型旋转动画

核心步骤与完整代码

我们需要完成加载模型、确定旋转中心、设置相机动画这几个核心任务。下面是可直接运行的代码,每一步都有清晰注释:

import bpy
import math
import mathutils

# 1. 清理默认场景(可选,避免立方体/灯光干扰动画效果)
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()

# 2. 加载目标OBJ文件
obj_file_path = "你的OBJ文件绝对路径/模型.obj"  # 替换成你的文件实际路径
bpy.ops.wm.obj_import(filepath=obj_file_path)
imported_model = bpy.context.selected_objects[0]  # 获取加载后的模型对象

# 3. 计算模型的几何中心(作为相机旋转的锚点)
def get_model_world_center(obj):
    # 获取模型在世界空间下的所有边界框顶点
    world_space_bbox = [obj.matrix_world @ v for v in obj.bound_box]
    # 取8个顶点的坐标平均值,得到几何中心
    center_point = sum((vec for vec in world_space_bbox), mathutils.Vector()) / 8
    return center_point

model_center = get_model_world_center(imported_model)

# 4. 设置相机(创建或复用场景已有相机)
if not bpy.context.scene.camera:
    bpy.ops.object.camera_add()
camera = bpy.context.scene.camera

# 调整相机参数,确保能完整拍到模型
camera.data.lens = 35  # 焦距可根据模型大小调整
# 初始位置:围绕模型中心设置一个合适的观察半径(这里选10单位,按需修改)
camera.location = model_center + mathutils.Vector((10, 0, 4))

# 添加Track To约束,让相机始终看向模型中心
track_constraint = camera.constraints.new(type='TRACK_TO')
track_constraint.target = imported_model
track_constraint.track_axis = 'TRACK_NEGATIVE_Z'
track_constraint.up_axis = 'UP_Y'

# 5. 配置动画帧范围与关键帧
total_frames = 15  # 你指定的K帧数量
bpy.context.scene.frame_start = 1
bpy.context.scene.frame_end = total_frames

# 设置第1帧的初始旋转关键帧
camera.rotation_euler.z = 0
camera.keyframe_insert(data_path="rotation_euler", frame=1)

# 设置第15帧的结束旋转关键帧(2π表示完整旋转一圈,可改成π实现半圈)
camera.rotation_euler.z = 2 * math.pi
camera.keyframe_insert(data_path="rotation_euler", frame=total_frames)

# 优化关键帧插值,让旋转匀速流畅
for fcurve in camera.animation_data.action.fcurves:
    for keyframe in fcurve.keyframe_points:
        keyframe.interpolation = 'LINEAR'

关键细节说明

  • 几何中心计算:通过模型世界空间的边界框顶点取平均,确保相机围绕模型的实际中心旋转,而非场景原点(即使模型不在原点也不影响)。
  • Track To约束:不用手动调整每帧的相机朝向,让相机全程自动对准模型,大幅简化动画设置。
  • 旋转参数调整:可以修改total_frames控制动画时长,调整2 * math.pi改变旋转角度(比如改成math.pi/2就是旋转90度)。
  • 观察半径调整:camera.location里的(10,0,4)可根据模型大小修改,确保模型始终在相机视野内。

注意事项

  • 务必替换代码中的obj_file_path为你的OBJ文件绝对路径(Windows路径请用双反斜杠\\或原始字符串r"路径")。
  • 如果模型加载后有多个对象,可根据名称筛选imported_model,比如bpy.data.objects["你的模型名称"]。

内容的提问来源于stack exchange,提问作者DuckQueen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:06