码迷,mamicode.com
首页 > 其他好文 > 详细

osg矩阵变换节点-----平移旋转缩放

时间:2015-06-16 12:21:05      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

osg矩阵变换节点-----平移旋转缩放

转自:http://www.cnblogs.com/ylwn817/articles/1973396.html

 

平移旋转缩放这个三个是osg矩阵操作中,最常见的操作,下面给出示例以及说明

首先先了解下osg空间方向:

技术分享

 osg方向如左图所示,x轴表示屏幕水平方向,y轴表示和屏幕垂直方向即屏幕里面方向,z轴表示屏幕垂直方向,每个箭头指向表示正方向 

下面来学习矩阵变换操作

首先平移:

#include<osgDB/ReadFile>
#include<osgViewer/Viewer>
#include<osg/Node>
#include<osg/MatrixTransform>
void main()
{
    osgViewer::Viewer viewer;
    osg::ref_ptr<osg::Group> root=new osg::Group();   
    osg::ref_ptr<osg::Node> osgcool=osgDB::readNodeFile("cow.osg");
       
    osg::ref_ptr<osg::MatrixTransform> trans=new osg::MatrixTransform();
    trans->setMatrix(osg::Matrix::translate(0,0,20));
    trans->addChild(osgcool.get());

    root->addChild(osgcool.get());
    root->addChild(trans.get());
    
    viewer.setSceneData(root.get());
    viewer.realize();
    viewer.run();
}

其中 trans->setMatrix(osg::Matrix::translate(0,0,20));就是用来平移物体,这个表示象Z轴正方向平移也就是屏幕正上方。

缩放操作:

技术分享
#include<osgDB/ReadFile>
#include<osgViewer/Viewer>
#include<osg/Node>
#include<osg/MatrixTransform>
void main()
{
    osgViewer::Viewer viewer;
    osg::ref_ptr<osg::Group> root=new osg::Group();
    
    osg::ref_ptr<osg::Node> osgcool=osgDB::readNodeFile("cow.osg");

    osg::ref_ptr<osg::MatrixTransform> trans=new osg::MatrixTransform();
    trans->setMatrix(osg::Matrix::scale(0.5,0.5,0.5)*osg::Matrix::translate(0,-10,0));

    root->addChild(osgcool.get());
    root->addChild(trans.get());
    
    viewer.setSceneData(root.get());
    viewer.realize();
    viewer.run();
View Code

osg::Matrix::scale(0.5,0.5,0.5)表示缩放的比例,也就是原来物体的一般大小

 旋转:

技术分享
#include<osgDB/ReadFile>
#include<osgViewer/Viewer>
#include<osg/Node>
#include<osg/MatrixTransform>
void main()
{
    osgViewer::Viewer viewer;
    osg::ref_ptr<osg::Group> root=new osg::Group();
    
    osg::ref_ptr<osg::Node> osgcool=osgDB::readNodeFile("cow.osg");

    osg::ref_ptr<osg::MatrixTransform> trans=new osg::MatrixTransform;
    trans->setMatrix(osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0));
    trans->addChild(osgcool.get());

    root->addChild(osgcool.get());
    root->addChild(trans.get());
    
    viewer.setSceneData(root.get());
    viewer.realize();
    viewer.run();
View Code

osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转

 旋转可能有理解错误,以实际效果为准

 

osg矩阵变换节点-----平移旋转缩放

标签:

原文地址:http://www.cnblogs.com/flylong0204/p/4580150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!