如果参考了网上的其他文章,会发现测试需要将bin、data加入到环境变量以方便测试,个人不喜欢什么都加环境变量的这种方式。而且稍后建立的工程会手动添加这些库。
然而,最终还是妥协把bin目录添加进系统环境变量Path里了,确实是为了方便,原因稍后会讲到。
1. 样例测试
当然在这之前,将之前编译好的bin、include、lib都拷贝到根目录,顺带把测试数据Data也拷贝过来,只是为了方便找而已。
于是我得到了目录
E:\OSG\bin、 E:\OSG\include、 E:\OSG\lib、 E:\OSG\Data.
然后执行测试,测试主要用到bin目录下的程序,双击运行会发现都是一闪而过。没关系,打开cmd运行。
根据测试内容,我们运行osgversion.exe
其他的测试略过,比如osglogo,过程同理。
比较重要的是测试Data,主要通过osgviewer,只运行osgviewer.exe,则会出现帮助信息,看过之后,发现后面应该跟着osg数据文件,则加上Data文件里的随便一个文件,如常用的cow.osg
当然,也可以用osgviewerMFC.exe这个可视化见面更简单,也是用于打开osg文件的,这和我们昨天大致查看代码所得到的结论是一致的。也可以看到样例。操作过程 菜单栏File-Open-XX 你懂得
2. VS工程测试
这里很简单了,OSG源码中关于 osgview和osgviewerMFC给出了样例,可以分别参考工程Applications osgviewer和Examples osgviewerMFC参考写代码。这里做最简单的程序。
新建一个控制台程序,在项目属性-C++目录里添加包含目录E:\OSG\include,在库目录里添加E:\OSG\lib,写程序如下
// OSGTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgDB/ReadFile>
#pragma comment (lib,"osg.lib")
#pragma comment (lib,"osgDBd.lib")
#pragma comment (lib,"osgGAd.lib")
#pragma comment (lib,"osgViewerd.lib")
int main()
{
osgViewer::Viewer viewer;
viewer.addEventHandler(new osgViewer::WindowSizeHandler); //使之可以按F缩小
osg::Node* nSceneData = osgDB::readNodeFile("E:\\OSG\\Data\\cow.osg");
viewer.setSceneData(nSceneData);
int iRet = viewer.run();
return 0;
}
运行即可出现图像(添加环境变量后)。
这里为什么妥协将bin目录添加进环境变量了呢,因为如果不添加,运行会出现错误“缺少osg160-XX.dll”,可以把这些缺失文件拷贝到exe同目录一样可以运行,但是为了方便还是把bin目录添加进环境变量了,记得重启计算机。至于项目要求。。。到时候再说吧。
- 这里有一个不同点在于没有设置链接器,而在代码中实现了链接。怎么写呢?一个小技巧在于看报错的导出函数类名是什么,如下图,就可以通过 #pragma comment (lib,"osg.lib") 解决。如果不幸不是这个,结合源码在lib文件中找到对应的文件。至于这种写法相比较于设置链接器的优势,参考 https://www.cnblogs.com/xietianjiao/p/6425631.html
3. 读取其他格式文件
osgDB::readNodeFile()函数提供了打开其他格式文件的方法,结合对osgDB的插件机制的了解,如果能找到相应的dll,则证明可以打开该格式,这里我的dll存在于 E:\OSG\bin\osgPlugins-3.7.0 目录下,根据dll可以大致知道可以打开什么格式文件,当然也可以自己开发相应格式的dll。