*c3d文件是一種公用文件格式,自1980年代中期以來,已在生物力學(xué),動畫和步態(tài)分析實(shí)驗室中用于記錄同步的3D和模擬數(shù)據(jù)。3D Motion Capture System制造商、Animation行業(yè)的公司基本都為它提供支持。
作者這里大體上描述下*c3d文件格式。*c3d文件是一種二進(jìn)制文件,這有利于應(yīng)用程序快速讀取與存儲,但就是不直觀。二進(jìn)制數(shù)據(jù)根據(jù)CPU的不同分為Intel、DEC、SGI三種,Intel和DEC是低位在前存儲,SGI是高位前端存儲。大家在讀*c3d文件時首先要讀取文件具體是哪種二進(jìn)制文件格式,后面的解析才是準(zhǔn)確的。C3D文件文件格式是按照數(shù)據(jù)塊存儲的,每512個bit為一個數(shù)據(jù)塊,這有利于數(shù)據(jù)查找與組織。
*c3d文件主要是頭文件塊512個字節(jié),組與參數(shù)塊1個或者多個數(shù)據(jù)塊,再就是三維點(diǎn)和模擬數(shù)據(jù)塊。
<頭文件數(shù)據(jù)塊>
*c3d頭文件主要描述了,三維點(diǎn)的數(shù)量、模擬數(shù)據(jù)量、每幀模擬數(shù)據(jù)量、點(diǎn)的采樣頻率、Scal值等參數(shù)以及事件參數(shù)。*c3d存儲三維點(diǎn)及模擬數(shù)據(jù)可以是I16整型數(shù)據(jù)格式或者是32位的浮點(diǎn)型,通過Scal值的正負(fù)來判斷,Scal為負(fù)值,就是32位的浮點(diǎn)型,正值就是I16整型數(shù)據(jù)存儲。
<組與參數(shù)數(shù)據(jù)塊>
*c3d文件的組與參數(shù)主要是存儲對各個參數(shù)的描述,比如POINT組(指的是三維點(diǎn))這一個組里面又包含很多的參數(shù),比如USED、SCAL、LABLES...;類似于一級樹形結(jié)構(gòu)。
<組的存儲格式>
<參數(shù)存儲格式>
*c3d文件組與參數(shù)的存儲并不是先存組后存參數(shù),是無需狀態(tài),有可能是存完一個組后,跟著存另一個組,也有可能是存第一個組下面的參數(shù),具體存的組或者是參數(shù)根據(jù)第二個字節(jié)的正負(fù)判斷,負(fù)數(shù)是組,正數(shù)是組下面的參數(shù)。
<數(shù)據(jù)塊>
點(diǎn)與模擬數(shù)據(jù)的存儲包含多個數(shù)據(jù)塊。數(shù)據(jù)可以是整型數(shù)據(jù)存儲也可以浮點(diǎn)類型存儲,整形數(shù)據(jù)格式會小一倍,整形點(diǎn)數(shù)據(jù)需要乘以Scal還原成浮點(diǎn)類型,浮點(diǎn)類型則不需要。數(shù)據(jù)是一幀一幀的存儲,先存點(diǎn)再存模擬信號(如果有的話)。
<整型點(diǎn)的數(shù)據(jù)格式>
一共是8個bit,注意最后的2個字節(jié),1-7位是相機(jī)的掩碼,最后8位是數(shù)據(jù)的殘差。
<32位浮點(diǎn)型點(diǎn)的格式>
一共是16個bit,前12個bit是點(diǎn)的XYZ坐標(biāo),后面4個先轉(zhuǎn)成16位整形再解析相機(jī)的掩碼和數(shù)據(jù)的殘差。
<模擬信號存儲>
模擬信號的數(shù)據(jù)格式與點(diǎn)的數(shù)據(jù)格式必須保持一致,都是整型或者都是浮點(diǎn)型。模擬信號需要通過以下公式進(jìn)行換算
ANALOG組下面讀出OFFSET,SCAL,GEN_SCALE參數(shù)。
模擬信號的存儲是每幀一個sample一個sample的存儲,比如點(diǎn)的幀頻是50Hz,模擬信號的幀頻是200Hz,每幀需要存儲4個sample,這個參數(shù)在頭文件里面有描述。每個Sample里面包含多個通道的數(shù)據(jù),具體多少通道參考ANALOG組下面USED參數(shù)的數(shù)值。
<方法一>
首先介紹下官網(wǎng)的方法,下載C3Dserver_setup.exe安裝,安裝完成后計算機(jī)就存在了C3Dserver的ActiveX控件。LabVIEW通過ActiveX控件對文件進(jìn)行操作,比如讀、修改及存儲。這個分免費(fèi)版和付費(fèi)版。免費(fèi)版與付費(fèi)版的唯一區(qū)別就是免費(fèi)版速度會慢,就是故意加了延時!但是這個打包成自己的做的軟件畢竟是不方便,一個是慢一個是要安裝插件,不是很專業(yè)。
<方法二>
最好的解決方案就是認(rèn)真讀文檔用LabVIEW寫一套*c3d文件編輯工具,不依賴第三方,作者就干了這事,制作了Motion_Lab_C3D LabVIEW庫。
C3D_Reader支持文件頭、事件頭、組與參數(shù)、數(shù)據(jù)的讀取。
C3D_Writer根據(jù)輸入的頭、組與參數(shù)、點(diǎn)、模擬數(shù)據(jù),保存為標(biāo)準(zhǔn)的*c3d文件。另外開發(fā)了快速搜索數(shù)據(jù)結(jié)構(gòu),支持組與參數(shù)數(shù)據(jù)的快速檢索與修改。
后面這套工具將集成到Azure Kinect Sensor&BodyTracking For LabVIEW工具包,用于人體跟蹤后的動捕數(shù)據(jù)存儲,這將有助于開發(fā)者將跟蹤的動捕數(shù)據(jù)快速遷移到第三方軟件進(jìn)行運(yùn)動生物力學(xué)學(xué)分析、動畫制作等應(yīng)用。下一個版本更新!
審核編輯:湯梓紅
-
3D
+關(guān)注
關(guān)注
9文章
2899瀏覽量
107685 -
LabVIEW
+關(guān)注
關(guān)注
1974文章
3656瀏覽量
324537 -
文件格式
+關(guān)注
關(guān)注
0文章
20瀏覽量
15095
原文標(biāo)題:*c3d File Edit For LabVIEW
文章出處:【微信號:gh_63f7cd07072a,微信公眾號:LabVIEW逆向工程高級編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論