目录
前言
该教程旨指导第一次上手OSG的读者上手第一个程序,如同刚学C/C++时怎么去写一个“hello world.”程序一样。因此不会涉及难度较高的部分,例如编译和源码和原理讲解。就仅仅是将那头牛显示出来而已。
零、OSG介绍
直接看官网,介绍的比我好多了。
地址:osg(osg中文社区)-osgEarth-osgViewer-基于OpenGL-开源三维渲染引擎-图形引擎-虚拟仿真工具-osg教程-osg仿真 (osgchina.org)
一、获取OSG库和测试素材
OSG是开源的,向开发者提供了两种方式去接入,一种是直接提供源码,开发者直接去使用CMAKE 编译。我相信如果已经编译出来的同事,基本也已经会怎么开发第一个程序了,所以这里介绍第二种,选择直接使用官方编译好的二进制库,如果只是写一些简单的仿真程序,使用二进制库足够了。下载地址:OpenSceneGraph | Objexx Engineering
注意:这里我们下载release版本,这里涉及到后面VS怎么导入的问题,否则会报段错误:
0xjavascript:void(0);00007FFED6F17BED (osgViewer.dll)处(位于 OSGTest1.exe 中)引发的异常
下载好解压之后有三个文件夹:
osg也提供测试DEM可能 用到的模型素材,测试素材下载地址:数据资源 (osgchina.org)
二、VS2022中导入OSG库
VS中导入osg库,是开发的基础。这里其实和普通的导入方式一致,只不过有几处细节需要知晓。
0. 将上面include和lib拷贝到项目下的osg文件夹(自己创建)下。
1.新建空项目,当然了,创建控制台应用也是一毛一样的。
2. 进入项目界面,随即创建个main文件,这就是程序的入口了。这里要先创建main.cpp,才能在项目属性中找到c/c++的设置配置。同时这里我们要主要下面的配置都需要使用release环境。
3. 右键项目名-->属性-->C/C++-->常规-->附加包含目录:填入:$(ProjectDir)osg\include
加入osg二进制中的include目录,使用宏定位到当前项目路径。
4. 右键项目名-->属性-->链接器-->常规-->附加目录:填入:$(ProjectDir)osg\lib
5.右键项目名-->属性-->链接器-->输入-->附加依赖项:
OpenThreads.lib
osg.lib
osgAnimation.lib
osgDB.lib
osgFX.lib
osgGA.lib
osgManipulator.lib
osgParticle.lib
osgPresentation.lib
osgQOpenGL.lib
osgShadow.lib
osgSim.lib
osgTerrain.lib
osgText.lib
osgUI.lib
osgUtil.lib
osgViewer.lib
osgVolume.lib
osgWidget.lib
6. 右键项目名-->属性-->C/C++-->预处理器-->预处理定义:这里是因为osg使用了32位的opengl,如果不进行这一操作,将会报错,说找不到opengl。
7. main函数中编写代码,并运行;
#include <iostream>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main()
{
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("D:\\workspace_vs\\OpenSceneGraph-Data-3.0.0\\OpenSceneGraph-Data-3.0.0\\cow.osg"));
return viewer.run();
8. 上面运行将会报错 找不到“xxx.dll”库,"could not find plugin to read objects from file xxx.osg",这是正常的,因为osg的运行需要依赖大量动态库。这里提供直接将上面下载的bin文件夹拷贝到项目下的 “你的项目\x64\Release”中,与生成的exe文件放在一块即可。![](https://img-blog.csdnimg.cn/direct/cac2222b7e0c45e0a481ab36afa2aa2a.png)
日后开发的项目可直接将release文件夹发给对方使用。
三、尾言
至此,程序将能顺利执行。这里还是建议要下载源码,因为源码中包含了大量的示例代码可学习。