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,否则编译不成功,接下来编译就好了;
-
几个重要的步骤就是复制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跑不出来,大概率是驱动出了问题,查版本去吧!!!(是不是暴露了win的版本兼容很成问题,微软自己的软件啊这可是)
搞定工程
接下来就是用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,如下图所示,
在OpenNI2安装目录bin中找到该文件复制到提示的路径下;
-
不是有效的win32应用程序怎么解决,这可能是你的.dll真的不符合它们的要求,从dll文件下手吧;