osg 矩阵的平移缩放旋转(转)
来源:互联网 发布:仙侣情缘源码 编辑:程序博客网 时间:2024/05/21 19:43
平移旋转缩放这个三个是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();
}
#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();
#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();
}
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();
#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();
}
osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转,(已验证)假设x=1,则以x轴旋转90°。
阅读全文
0 0
- osg 矩阵的平移缩放旋转(转)
- 矩阵改变,平移,缩放,旋转(转)
- iOS 图形上下文的矩阵操作(平移、旋转、缩放)
- openGL 矩阵的旋转-平移-缩放
- 矩阵的平移,缩放和旋转
- Unity中矩阵的平移、旋转、缩放
- 矩阵变换与图片平移,旋转,缩放的原理
- 图形开发之基于向量矩阵的平移、旋转、缩放
- 七 iOS之 矩阵操作(图形上下文的平移、缩放、旋转)
- 矩阵运算——平移,旋转,缩放
- 矩阵运算——平移,旋转,缩放
- 矩阵运算——平移,旋转,缩放
- 矩阵运算——平移,旋转,缩放
- ios-矩阵旋转缩放平移操作
- [D3D9] 世界坐标转换矩阵的获取:旋转矩阵、平移矩阵、缩放矩阵
- osg中使用MatrixTransform来实现模型的平移/旋转/缩放
- 【第三弹】从矩阵中提取平移、旋转、缩放矩阵
- 三角形的平移&旋转&缩放程序(基于OPENCV)
- 第一周 计算机组成及Linux基础入门
- 【Java学习笔记】String对象的不变性和intern()方法——基于Java SE8
- 基础练习 特殊的数字
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 无线网络设置隐藏网络以及mac地址绑定
- osg 矩阵的平移缩放旋转(转)
- E
- VB.NET中的程序流控制
- 稳压电源 连载5:一般电源的设计
- 《大象 Thinking in UML》学习笔记(六)——UML核心视图之静态视图:用例图、类图
- android 跳转百度,高德,腾讯地图以及商店
- Spring 整合 Hibernate
- codeforces-768B Code for 1
- 2 Keys Keyboard_Week13