cmake

直接下載exe文件安裝;
opengl
OpenGL只是一個標準,它的實現一般自帶在操作系統里,只要確保顯卡驅動足夠新就可以使用。如果需要在程序里直接使用OpenGL,會有很多非常惡心的預備工作要做,而且可能還要專門為平臺的差異寫一些代碼。要跳過這些工作,可以用一個utility庫,直接使用它提供的函數,就不用操心那些細節了。這樣的庫新一點的有GLEW,因為開源所以安裝相對方便(大不了丟進去一起編譯),但各種教程和書里常見的是閉源的GLUT。由于GLUT的作者已經很久沒更新過了(最后更新于2000年!= =),所以其他人另外做了一個接口兼容GLUT的freeglut,開源而且一直在維護中。
在 Windows 下可以安裝 GLUT 或者 freeglut 其中的一個,不過建議安裝后者。在 Ubuntu 下安裝 freeglut即可。
freeglut
1. 先介紹一種方法,使用MinGM
在Windows/Ubuntu下安裝OpenGL環境GLUT/freeglut
- 下載MinGW,請自行解決,這里不再贅述;
- 點擊下載
freeglut3.0.0 for MinGW
注意!在64位版本的windows 7 下,win32版的freeglut.dll要放入sysWoW64,而x64版本的要放入system32。因為system32中的動態鏈接庫其實是原生64位版本的。而為了兼顧兼容性,才有了sysWoW64,這個目錄中存放的反而是32位的鏈接庫。
```
C:\Windows\SysWOW64
└─ freeglut.dll(32位的mingw就用bin目錄下那個,不是bin/x64那個)
D:\mingw
├─ include
│ └─ GL
│ ├─ freeglut.h
│ ├─ freeglut_ext.h
│ ├─ freeglut_std.h
│ └─ glut.h (注意這個和老版的glut.h不同)
└─ lib
├─ libfreeglut.a (這兩個同樣用lib目錄下的兩個)
└─ libfreeglut_static.a
```
2. 如果上面的不可以,使用VS
沒關系,windows就是這么坑,本人混跡Mac,Ubuntu各種操作系統未曾見過如此坑的(對開發者不友好),各種版本問題;吐槽結束,我們用微軟的軟件搞一下;
Freeglut在windows 7 64bit + visual studios 2010下的安裝與配置
用 Visual C++ 2015 編譯 FreeGLUT
-
下載freeglut(本人是2.8.1版本)
用Visual Studio 2013打開freeglut.sln文件,注意不要使用太高版本的VS,否則編譯不成功,接下來編譯就好了;
image_1csalgl8h1api171ckg01bb4dfl9.png-72.8kB -
幾個重要的步驟就是復制dll和lib
- 然后進入“freeglut-2.8.1\lib”。分別復制x64和win32下的freeglut.dll文件到“C:\windows\system32”和“C:\windows\sysWoW64”下。
強行安行第二次注意,這里一定要搞清楚;注意!在64位版本的windows 7 下,win32版的freeglut.dll要放入sysWoW64,而x64版本的要放入system32。因為system32中的動態鏈接庫其實是原生64位版本的。而為了兼顧兼容性,才有了sysWoW64,這個目錄中存放的反而是32位的鏈接庫。
2. 接著分別將x64和win32目錄下的兩個freeglut.lib放入“D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64”和“D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib”。這里就是正常對應的。
3. 最后將“\freeglut-2.8.1\include”下的“GL”目錄復制到“D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include”即可。
4. 測試工程,網上找個glut的代碼自己編一下吧!
- 然后進入“freeglut-2.8.1\lib”。分別復制x64和win32下的freeglut.dll文件到“C:\windows\system32”和“C:\windows\sysWoW64”下。

InfiniTAM
重點來啦,前提是上面的你必須解決,否則你也將有更多的坑要踩,排除好嘛,排除法!!!
搞定驅動
既然要用到深度相機,首先要搞定硬件的驅動程序,把深度相機的Demo跑起來就算是成功了!
我這里用到的是Kinect V1設備,于是上網找kinect for sdk驅動程序,注意一下版本,具體只能試了;查了一下貌似Kinect SDK2對硬件有要求,覺得還是用v1的驅動(遠離高版本),網上給出了兩個下載,一個是v1.8的驅動Kinect for Windows SDK v1.8和一個開發者工具包toolkitKinect for Windows Developer Toolkit,下載下來安裝。

接下來打開openni的示例程序,NiViewer,出來深度圖你就搞定了!??!哈哈哈,圖像分左右,左邊是深度圖,右邊是本人;
一個小秘籍:測試demo跑不出來,大概率是驅動出了問題,查版本去吧?。。。ㄊ遣皇潜┞读藈in的版本兼容很成問題,微軟自己的軟件啊這可是)

搞定工程
接下來就是用cmake打開你的InfiniTAM工程,并生成build路徑,如圖;

error MSB3073: The command setlocal
問題
打開后build,出現error MSB3073: The command setlocal
這個問題,貌似很棘手,下午4點,開始研究中,先搞杯咖啡去。。。
上面的這個問題卡了大哥一下午,現在已經是晚上七點,哥還在搞這個問題,現在正在下vs2010,準備編譯一下freeglut2.8.0版本,之前用的是2.8.1,因為看到工程項目里說是用2.8.0或者3.0.0,之前用3.0.0沒有成功,這個版本問題真的是坑;
接下來出現了三種解決方法:
- 如果編譯出現這個錯誤估計是版本不太不同造成的,雙擊錯誤來到錯誤的地方,刪除讓你錯誤的那行,編譯沒必要搞那么復雜,編譯通過,但是生成的程序仍然不能運行;
- 默認的 CMAKE_INSTALL_PREFIX 是 C 盤,沒有權限。修改 CMAKE_INSTALL_PREFIX到非當前文件夾即可。修改這個路徑是不起任何作用的;
- 解決辦法:(install)項目–>屬性–>生成事件–>后期生成事件–>在生成中使用–>否,這個修改了之后也是同第一種,減少了一個cmake命令;
總之以上雖然解決了編譯的問題,但是TAM程序還是未能啟動,現在是第二天上午10點,這個問題還在這里卡著。。。
運行過程出現cannot find or open the PDB file
這個是調試器的問題,直接按ctrl + F5解決,很恐慌,以為又要遇到什么大坑。
還是找不到驅動的問題

從驅動下手,然而我跑kinect的測試程序NiViewer是成功的啊,我想可能是這個程序的驅動要求不匹配造成的;
使用Visual Studio編譯中的問題
include移到系統庫
C:\Program Files(x86)\Windows Kits\10\Lib
添加Visual Studio工具并支持Visual C++ 64位編譯器
解決打開以前版本工程不兼容問題,打開vs, 點擊工具->擴展和更新,在彈出的對話框左側單機聯機,在右側輸入installer關鍵詞,內容截屏如下,下載Microsoft Visual Studio 2015 Installer Projects;
-
提示找不到OpenNI2.dll,如下圖所示,
image_1cs8to8mhs2gptu19k9pulju5m.png-13.9kB
在OpenNI2安裝目錄bin中找到該文件復制到提示的路徑下;
-
不是有效的win32應用程序怎么解決,這可能是你的.dll真的不符合它們的要求,從dll文件下手吧;
image_1cs8u2h8q6dk10m1gje1gps193r2j.png-50.1kB