纪念配置OSG踩过的那些坑。。。
osg的配置攻略网上有好多,但是,很多关键问题不提!!!就产生了一堆坑!!!为了避免以后再踩坑,在这记录一下。
1.OSG源代码的编译
现在编译好的资源也很难找 ,资源总失效,而且为了适配自己的环境,难免得自己编译下。网上攻略很多,就是cmake一下,但是一定要注意选择x64!
好几个攻略都提示注意vs版本,但没人提示第二行要改成x64,不然后面vs无论win32还是x64都会冲突。
2.“osgViewer”: 不是类或命名空间名称
这时候cmd能出现cow.osg,批生成也没有报错,但是osgViewer找不到。
关键问题在包含目录!!!包含目录要添加两个!!!
网上都是默认包含目录跟库目录都是一个,没强调包含目录要添加源代码的include 和编译后的include。
//包含目录
\OSG\OpenSceneGraph\include
\OSG\OSGbulid\include
//库目录
\OSG\OSGbulid\lib
3.gl.h报错
gl.h中用到了wingdi.h中定义的WINGDIAPI,网上说在头文件最开始添加 #include <Windows.h>即可
但是我这还是有问题,得加三行
#include <windows.h>
#include <gl\gl.h> //OpenGL Header
#include <gl\glu.h> //GLu32 Header
而且,c++头文件有顺序!!!最后的顺序是
#include “pch.h”
#include <windows.h>
#include <gl\gl.h> //OpenGL Header
#include <gl\glu.h> //GLu32 Header
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
4.“stdafx.h”
#include “stdafx.h”
示例代码里都有这个头文件,但2021年8月我这里头文件是#include “pch.h”,需要改成这个头文件,而且考虑到顺序,放在首行。
最后放个测试代码
#include "pch.h"
#include <windows.h>
#include <gl\gl.h> //OpenGL Header
#include <gl\glu.h> //GLu32 Header
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main(int argc, char **argv)
{
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
return viewer.run();
}