1 数据准备
1.0 环境准备
本机使用的环境是vs2015
1.1使用的安装包
- OSG源码:OpenSceneGraph3.6.3
- 打包好的三方库:这里直接用的打包好的三方库,并未使用三方库的源码进行编译。
- OpenSceneGraph-Data-3.0.0
地址:SuperKX/OpenSceneGraph: osg库配置 (github.com)https://github.com/SuperKX/OpenSceneGraph
1.2 创建工程文件
建立文件夹,如“OSG“,将OSG源码、打包好的三方库、数据data放入并解压,如下图:
2 编OSG库
cmake编译osg库,主要修改内容为:三方库中各个库的地址,以及编译后OSG库的生成路径CMAKE_INSTALL_PREFIX,如下图:
3 工程生成
如下图所示,分别在release版本和debug版本下,对ALL_BUILD和INSTALL先后生成。生成INSTALL的时候注意将debug和release版本分别放入不同文件夹下,否则会覆盖掉。
如果上一步的库地址配置正确,这里应该不会报错。若报错某个库找不到,可以查看下cmake中对应库的地址是否配置正确。
生成后会产生如下结构:
分别对release和debug版本打包后:
现在的库可以直接调用了。
4 测试
新建一个工程
4.1 cmake书写
cmake_minimum_required(VERSION 2.8)
SET(EXE_NAME OSGView)
ADD_EXECUTABLE(${EXE_NAME} main.cpp )
############################### 包含目录 #####################################
include_directories( E:/OSG/OpenSceneGraph-3.6/install/X64_Debug/include) #osg库
############################### 添加链接库 #####################################
#设置osg库
set(OSG_LIB_RELEASE E:/OSG/OpenSceneGraph-3.6/install/X64_Release/lib ) #当前只配置了releases版本
set(OSG_LIB_DEBUG E:/OSG/OpenSceneGraph-3.6/install/X64_Debug/lib )
set(OSG_LIB
optimized ${OSG_LIB_RELEASE}/osgDB.lib
optimized ${OSG_LIB_RELEASE}/osgViewer.lib
debug ${OSG_LIB_DEBUG}/osgDBd.lib
debug ${OSG_LIB_DEBUG}/osgViewerd.lib
)
target_link_libraries(${EXE_NAME} ${OSG_LIB})
set_target_properties(${EXE_NAME} PROPERTIES OUTPUT_NAME ${EXE_NAME}) #生成运行文件名
4.2 main函数
如下所示,找到测试用的osg文件放入相应环境下。
#include <Windows.h>
#include<osgViewer/Viewer>
#include<osgDB/ReadFile>
int main(int argc, char **argv)
{
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
return viewer.run();
}
4.3 编译生成运行
注意,这里我的工程是OSGView.exe,运行会报错需要很多dll。这里直接将需要运行的osg等文件、及生成的exe放入到之前对应release/debug的OSG生成的bin文件中,双击运行即可。
需要注意的是,需要把1.1中的data文件夹中的cow.osg及相应的reflect.rgb文件(纹理)放到运行目录下。若没有reflect文件可能是白模。
注意:
1、需要调试代码的时候,将相应dll的pdb文件一并放到运行目录下。可以跳转到OSG库的源码中。