我想知道是否可以将姿态和位置数据(滚动/俯仰/偏航和 xyz)从逗号分隔文件导入到 Blender?
我记录了一辆小型遥控车的数据,我想在 3D 世界中表示它的运动。
我也有时间戳,所以如果有一种方法可以动画对象的运动,那就太棒了!!
任何帮助将不胜感激!!
此致。
我想知道是否可以将姿态和位置数据(滚动/俯仰/偏航和 xyz)从逗号分隔文件导入到 Blender?
我记录了一辆小型遥控车的数据,我想在 3D 世界中表示它的运动。
我也有时间戳,所以如果有一种方法可以动画对象的运动,那就太棒了!!
任何帮助将不胜感激!!
此致。
稍作修改,使用 csv 模块
import bpy
import csv
position_vectors = []
filepath = "C:\\Work\\position.log"
csvfile = open(filepath, 'r', newline='')
ofile = csv.reader(csvfile, delimiter=',')
for row in ofile:
position_vectors.append(tuple([float(i) for i in row]))
csvfile.close()
这将使您的积分进入 Blender。请注意 csv.reader 中的 delimiter 参数,并相应地进行更改。通过您的遥控车的真实示例文件,我们可以提供更完整的解决方案。
对于搅拌机 v2.62:
如果您有一个文件“positions.log”,如下所示:
-8.691985196313894e-002; 4.119284642631801e-001; -5.832147659661263e-001
1.037146774956164e+000; 8.137243553005405e-002; -5.703274929662892e-001
-3.602584527944123e-001; 8.378614512537046e-001; 2.615265921163826e-001
6.266465707681335e-001; -1.128416901202341e+000; -1.664644365541639e+000
3.327523280880091e-001; 4.488553740582839e-001; -2.449449085462368e+000
-7.311567199869298e-001; -1.860587923723032e+000; -1.297179602213110e+000
-7.453603745688361e-003; 4.770473577895327e-001; -2.319515785100494e+000
1.935170866863264e-001; -2.010280476717868e+000; 3.748000986190077e-001
5.201529166915653e-001; 3.952972788761738e-001; 1.658581747430548e+000
4.719198263774027e-001; 1.526020825619557e+000; 3.187088567866725e-002
您可以在搅拌机中使用此 python 脚本阅读它(注意缩进!)
import bpy
from mathutils import *
from math import *
from bpy.props import *
import os
import time
# Init
position_vector = []
# Open file
file = open("C:\\Work\\position.log", "r")
# Loop over line in file
for line in file:
# Split line at ";"
splittet_line = line.split(";")
# Append new postion
position_vector.append(
Vector((float(splittet_line[0]),
float(splittet_line[1]),
float(splittet_line[2]))))
# Close file
file.close()
# Get first selected object
selected_object = bpy.context.selected_objects[0]
# Get first selected object
for position in position_vector:
selected_object.location = position
这将读取文件并相应地更新第一个选定对象的位置。前进方向:你要知道的是如何设置动画的关键帧......
考虑将这个 python 片段添加到上面的解决方案中
obj = bpy.context.object
temporalScale=bpy.context.scene.render.fps
for lrt in locRotArray:
obj.location = (lrt[0], lrt[1], lrt[2])
# radians, and do you want XYZ, or ZYX?
obj.rotation_euler = (lrt[3], lrt[4], lrt[5])
time = lrt[6]*temporalScale
obj.keyframe_insert(data_path="location", frame=time)
obj.keyframe_insert(data_path="rotation_euler", frame=time)
我尚未对其进行测试,但它可能会起作用,并且可以帮助您入门。
使用 spice2xyzv 文件作为输入文件。“突变鲍勃”编写的脚本似乎有效。
但是我认为 xyz 速度数据是 km/s 而不是欧拉角,并且导入不适用于角度。
# Records are <jd> <x> <y> <z> <vel x> <vel y> <vel z>
# Time is a TDB Julian date
# Position in km
# Velocity in km/sec
2456921.49775 213928288.518 -446198013.001 -55595492.9135 6.9011736 15.130842 0.54325805
有没有办法让它们进入 Blender?我应该将速度角转换为欧拉,这实际上可能吗?
我使用这个脚本:
import bpy
from mathutils import *
from math import *
from bpy.props import *
import os
import time
# Init
position_vector = []
# Open file
file = open("D:\\spice2xyzv\\export.xyzv", "r")
obj = bpy.context.object
temporalScale=bpy.context.scene.render.fps
for line in file:
# Split line at ";"
print("line = %s" % line)
line = line.replace("\n","")
locRotArray = line.split(" ")
print("locRotArray = %s" % locRotArray )
#for lrt in locRotArray:
print(locRotArray[1])
obj.location = (float(locRotArray[1]), float(locRotArray[2]), float(locRotArray[3]))
# radians, and do you want XYZ, or ZYX?
obj.rotation_euler = (float(locRotArray[4]), float(locRotArray[5]), float(locRotArray[5]))
time = float(locRotArray[0])*temporalScale
print("time = %s" % time)
obj.keyframe_insert(data_path="location", frame=time)
obj.keyframe_insert(data_path="rotation_euler", frame=time)