我正在使用Kinect V2進行體積記錄。我正在使用Kinect sdk版本2(使用C#)。 我想保存一個包含幾個點雲「幀」的文件。我將在Unity中導入文件並將幀作爲「Pointcloud動畫」播放。我過去在Unity(https://vimeo.com/140683403)內完成了這個工作,但是這次我使用VisualStudio來訪問SDK中的所有方法。在文件中保存點雲數組的最佳方法
該文件應包含:
- 頂點數組(點)
- 的顏色數組(每個點的顏色)
最終應該有可能增加:
- 一排三角形
- 用戶關節(我目前用它來記錄人類)
在我的第一次嘗試中,我編寫了一個非常簡單的包含頂點列表的UserFrame類。然後我序列化了一列用戶框架,我可以在Unity中成功導入。然而,在Unity中對它進行反序列化需要很長時間(大約一分鐘記錄幾秒鐘),所以我想知道是否有更好的方法。
- 我是否應該編寫和解析ASCII文件?
- 在之前的嘗試中,我的頂點是一個Array而不是List。這會提高反序列化的速度嗎?
這是類的編輯版本:
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();
您需要顯示您當前使用的代碼以保存速度較慢的代碼。你這樣做的原因是爲了讓人們寫出完全不適合你的答案。編輯您的問題並添加該代碼 – Programmer
謝謝。剛剛編輯了這個問題。 – Sergio
找不到任何問題。我猜你的數據太大了。考慮爲此使用Protobuf-net。它非常快。 – Programmer