【发布时间】:2017-09-08 23:29:02
【问题描述】:
我正在使用 Kinect V2 进行体积录制。我正在使用 Kinect sdk 版本 2(在 C# 中)。 我想保存一个包含几个点云“框架”的文件。我将在 Unity 中导入文件并将帧作为“点云动画”播放。我过去曾在 Unity (https://vimeo.com/140683403) 中完成此操作,但这次我使用 VisualStudio 来访问 SDK 中的所有方法。
该文件应包含:
- 顶点数组(点)
- 一组颜色(每个点的颜色)
最终应该可以添加:
- 三角形数组
- 用户关节(我目前正在用它来记录人体)
在我的第一次尝试中,我编写了一个非常简单的 UserFrame 类,其中包含一个顶点列表。然后我序列化了一个 UserFrames 列表,我可以在 Unity 中成功导入它。但是,在 Unity 中反序列化它需要很长时间(大约一分钟记录几秒钟)所以我想知道是否有更好的方法。
- 我应该编写和解析 ASCII 文件吗?
- 在之前的尝试中,我的顶点是一个数组而不是一个列表。这会提高反序列化的速度吗?
这是该课程的编辑版本:
public class UserFrame
{
//Frame time-stamp. Could be long int in milliseconds
//public float time;
// Each element in the vertexList contains an array of 3 floats.
public List<float[]> vertexList;
public UserFrame(List<float[]> _vertexList) {
vertexList = _vertexList;
}
}
序列化代码:
Stream stream;
stream = File.Open(finalPath, FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream, userFrameList);
stream.Close();
和反序列化(这是缓慢的部分):
Stream stream = File.Open (fileName, FileMode.Open);
BinaryFormatter bf = new BinaryFormatter ();
dummyFrames = (List <UserFrame>)bf.Deserialize (stream);
stream.Close ();
【问题讨论】:
-
您需要显示您当前正在使用的代码以保存速度较慢的代码。你这样做的原因是为了让人们写出对你不起作用的答案。编辑您的问题并添加该代码
-
谢谢。刚刚编辑了问题。
-
找不到任何问题。我猜你的数据太大了。考虑为此使用 Protobuf-net。它非常快。
标签: c# unity3d kinect-sdk point-clouds kinect-v2