开源共享原则
此文章参考至 OSG程序设计-杨石兴。转载请附带出处一 安装下载
osg 环境配置 请参考此链接按照步奏完成配置OSG详细安装步奏下载链接 ,此外还需要两个东西一个是cmake,用来配置osg,一个是番茄助手用来在vs下提高开发效率,哈哈用过都说好,这里我提供一个百度云链接方便下载链接:云盘链接 密码:9xr1
二 Hello World 编写
一 新建一个控制台程序,然后输入下面代码
1.#include <osgDB/ReadFile>
2.#include <osgViewer/Viewer>
3.void main()
4.{
5. osgViewer::Viewer viewer;
6. viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
7. viewer.realize();
8. viewer.run();
9.}
记得要配置项目的属性 有两个一个是include目录 一个是lib目录,连接器依赖性也需要,具体过程在详细安装步奏里。
此时运行起来就可以看到一个小飞机了如图
下面首先来逐行来解释整个程序:
第 1~2 行:这里是包含头文件,可以打开 OSG 的安装目录,发现应该存在 osgViewer 和 osgDB 的文件夹,
而 ReadFile 和 Viewer 都是其中的头文件。这里要说一下,一般需要头文件与对应库和动态链接DLL 就
可以编译了,不需要 CPP 文件,头文件是说明库文件和 DLL 的。
第 3 行:主函数,这里主函数还没有任何的参数。
第 4~5 行:这里申请了一个 viewer,这里要解释一下,为什么要 osgViewer::Viewer, osgViewer 是名字空间,
与 std::的地位是一样的,关于名字间是 C++防止重名的很重要的一个机制,从而使程序看起来井井有条。
这里你可以理解为申请一个观察器,该观察可以查看模型就可以了,在现实中我们也是叫Viewer 的。
比如,你的 Viewer 写的有问题,用 Viewer 等等打招乎语。注意这里申请的并非一个指针,而实是一个
对象实体。
第 6 行:这里是设置观察器 Viewer 中的数据,换句话说,有了观察器, 得可以年模型呀,模型中要以含有
路径,比如 viewer.setSceneData(osgDB::readNodeFile("C://glider.osg"));表示打开 C 盘根目录下的该模型。
其中//为转义字符,编译器会识别为/,从某种意义上讲,我个人从来不把文件夹设置为中文名,OSG
对中文支持的可不是很好。所以最好不用要中文路径名,还有就是有空格的路径名,最好也不用,不
要让这些无所谓的东西干扰你。
第 7 行:这个语句表达的意思非常多,事实上可以定位到 Viewer.cpp 的第 377 行,会发现里面的操作非常
多,可以理解为这是在渲染前的最后一步,会检查和设置图形上下文,屏幕啊什么的,会让你以前的
设置,对 Viewer 的设置都生效。
第 8 行:这一句的意思就是渲染了,如果要解释它的意思的话,可以用下面的几个语句来替代:
while(!viewer.done()){viewer.frame();}.意思也就是说,只要 viewer 没有结束,那么就绘制它的每一个帧
[frame]。