OpenSceneGraph几个重要功能节点练习
2010-12-26 02:11
411 查看
一. 空间变换节点
空间变换中最重要的是坐标系和矩阵运算了。OSG坐标系中使用右手系,Z轴垂直向上,X轴水平向右,Y轴垂直屏幕向里,与OpenGL和DirectX都不同。
相关缩放、旋转和平移主要由osg::Matrix, osg::Vec3, osg::Quat几个类来完成。
局部坐标系向世界坐标系转换规则是:设在局部坐标系下顶点 V 转换成世界坐标系坐标 V':
V' = V * Mn* Mn-1*……* M3* M2* M1* M0
其中M0到Mn一次为各个矩阵变换。从世界坐标系坐标下顶点 V' 转换成局部坐标系 V:
V = V' * M0-1 * M1-1 * M2-1 * M3-1 *……* Mn-1-1 * Mn-1
对于空间变换而言,无论是OpenGL,DirectX还是OSG,一般都会遵守SRT(Scale/Rotate/Translate)的运算顺序来完成符合矩阵的构建:
其公式为:
M =Ms * Mr * Mt
空间变换中最重要的是坐标系和矩阵运算了。OSG坐标系中使用右手系,Z轴垂直向上,X轴水平向右,Y轴垂直屏幕向里,与OpenGL和DirectX都不同。
相关缩放、旋转和平移主要由osg::Matrix, osg::Vec3, osg::Quat几个类来完成。
局部坐标系向世界坐标系转换规则是:设在局部坐标系下顶点 V 转换成世界坐标系坐标 V':
V' = V * Mn* Mn-1*……* M3* M2* M1* M0
其中M0到Mn一次为各个矩阵变换。从世界坐标系坐标下顶点 V' 转换成局部坐标系 V:
V = V' * M0-1 * M1-1 * M2-1 * M3-1 *……* Mn-1-1 * Mn-1
对于空间变换而言,无论是OpenGL,DirectX还是OSG,一般都会遵守SRT(Scale/Rotate/Translate)的运算顺序来完成符合矩阵的构建:
其公式为:
M =Ms * Mr * Mt
osg::MatrixTransform, osg::PositionAttitudeTransform, osg::AutoTransform 示例: 代码 [code] #include <osg/ProxyNode> #include <osgDB/ReadFile> #include <osg/ArgumentParser> #include <osgViewer/Viewer> #include <osg/Notify> #include <iostream> #pragma comment(lib, "osgd.lib") #pragma comment(lib, "osgDBd.lib") #pragma comment(lib, "osgViewerd.lib") int main(int argc, char** argv) { osg::ArgumentParser argument(&argc, argv); osg::ref_ptr<osg::ProxyNode> pn = new osg::ProxyNode(); unsigned int num = 0; for(int i = 1; i < argument.argc(); i++) { if( argument.isString(i) ) { std::cout << num << ": " << argument[i] << "\n" ; pn->setFileName( num++, argument[i] ); } } if( !pn->getNumFileNames() ) pn->setFileName(0, "cow.osg" ); osgViewer::Viewer viewer; viewer.setSceneData( pn.get() ); return viewer.run(); }
相关文章推荐
- OpenSceneGraph几个重要功能节点练习
- Open Scene Graph 写出节点纹理丢失、纹理错乱问题
- 2、OpenSceneGraph中添加节点、删除节点、隐藏节点以及添加开关的用法
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第十八课
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第三十课
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第三十五课_附录1
- Cocos2D-X学习4:几个重要的类:Node、Director、Scene、Layer
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第八课
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第四十课
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第四十三课
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第十九课
- OpenSceneGraph的安装
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第十一课
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第二十课
- Mac下编译 OSG ( OpenSceneGraph )
- OpenSceneGraph FAQ
- OpenSceneGraph与其他的三维建模软件
- openscenegraph
- 研究osg --OpenSceneGraph
- OpenSceneGraph中文官方网站