一、最简单的OpenSceneGraph程序

(最近更新:2006314)

原文地址:http://www.flmnware.com/


目的:通过本教程,学会OpenSceneGraph工程属性的设置,加载并查看三维模型,熟悉Viewer类提供的用户操作。




1、建立和设置工程

启动Microsoft Visual Studio .NET 2003,建立一个Win32控制台项目,在应用程序设置选项卡里,选择空项目,点击完成。为了在工程选项里出现C/C++的选项,先给工程添加一个空的C++源文件。

OpenSceneGraph运行需要多线程DLL的运行时库和RTTI,所以,在建立每个OpenSceneGraph工程后,第一件事就是更改工程设置。

打开项目属性,在C/C++选项卡里,点击代码生成页,更改运行时库,对于Debug版,用多线程调试 DLL (/Mdd),对于Release版,用多线程 DLL (/MD)

设置C/C++选项卡里的语言页的启用运行时类型信息为:是(/GR)

OpenSceneGraph程序需要链接对应的库文件,打开链接器选项卡里的输入页,设置附加依赖项,对于Debug版,是OpenThreadsWin32d.lib Producerd.lib osgd.lib osgDBd.lib osgFXd.lib osgGAd.lib osgParticled.lib osgProducerd.lib osgSimd.lib osgTerraind.lib osgTextd.lib osgUtild.lib,对于Release版,设置这些lib文件不带“d”的版本。

这样,工程属性就设置好了。


2、编辑程序

在刚才建立的空文件里输入如下内容:

#include <osgDB/ReadFile>

#include <osgProducer/Viewer>

int

main(int, char**)

{

osgProducer::Viewer viewer;

viewer.setUpViewer();

osg::Node* node = osgDB::readNodeFile("cessna.osg");

viewer.setSceneData(node);

viewer.realize();

while (!viewer.done())

{

viewer.sync();

viewer.update();

viewer.frame();

}

viewer.sync();

return 0;

}

#include <osgDB/ReadFile>

#include <osgProducer/Viewer>

int

main(int, char**)

{

osgProducer::Viewer viewer;

viewer.setUpViewer();

osg::Node* node = osgDB::readNodeFile("cessna.osg");

viewer.setSceneData(node);

viewer.realize();

while (!viewer.done())

{

viewer.sync();

viewer.update();

viewer.frame();

}

viewer.sync();

return 0;

}



编译运行后,就能看到一个飞机的模型。


NOTE如果看不到模型,检查OSG1.0是否正确安装,即OSG_FILE_PATH是否设置正确。


这个程序的核心是,osgProducer命名空间的Viewer类实例,这个类负责管理窗口的创建,控制投影矩阵,控制OpenGL的渲染,实现程序的主循环。它还具有控制场景渲染状态,查看帧速,抓图等功能。OsgDB命名空间的readNodeFile函数负责从文件里读入三维模型及其纹理等数据,它返回读入的节点,可以加到场景图中。主循环分三步,同步,更新和绘制,当用户按下ESC键时,osgProducer::Viewer::done()返回true,主循环结束。


3、程序的操作


鼠标:

摄像机操作器

Trackball

Flight

Drive

Terrain

左键

旋转视图

加速

加速

旋转视图

中键

平移视图

停止

停止

平移视图

右键

缩放

减速/倒退

减速/倒退

缩放




键盘:

Escape

退出程序

Space

重置摄像机位置

1

选择“轨迹球(Trackball)”摄像机操作器

2

选择“飞行(Flight)”摄像机操作器

3

选择“驾驶(Drive)”摄像机操作器

4

选择“地形(Terrain)”摄像机操作器

5

选择“不明飞行物(UFO)”摄像机操作器

b

开关背面剔除

f

全屏/窗口切换

h

显示帮助

H

在摄像机控制器是 UFO ,重置到起始位置

l

开关灯光

o

将当前场景的场景图保存到文件"saved_model.osg"

O

抓图,保存为文件"saved_image*.rgb"

s

显示帧速等信息

t

开关纹理

v

开关垂直同步

w

切换多边形、线、点显示模式

z

开始记录摄像机路径

Z

如果正在记录摄像机路径,保存路径到文件"saved_animation.path",然后开始播放这个路径文件



总结:OpenSceneGraphViewer类本身提供了很多功能,所以,只需要简单的几句代码,就能有一个不错的程序,这些功能如果用OpenGL实现,需要很多的时间。当不再为这些基础功能操心的时候,我们就能把精力放在我们要实现的功能上面。



作者:flmn

网站:http://www.flmnware.com

作者:flmn

网站:http://www.flmnware.com



1条评论

  1. 顶,已前玩过一下OSG

发表评论

评论也有版权!