osg 矩阵相关

ops/2024/12/22 1:49:13/

下面结果是一样的 

    osg::Matrix mtrixx;mtrixx.makeRotate(90 / 180.f * osg::PI, osg::Vec3(1, 0, 0));osg::Matrix mtrixx12 = osg::Matrix::rotate(90 / 180.f * osg::PI, 1, 0, 0);

备注: rotate或makerotate第一个参数是弧度,可以用  弧度值=osg::inDegrees(角度值)  得到弧度值,也可以用公式 : 角度值 / 180.f * osg::PI  来计算弧度值


下面结果是一样

    osg::Matrix m1;m1.makeTranslate(osg::Vec3(18, 12,3));osg::Matrix m2= osg::Matrix::translate(osg::Vec3(18, 12, 3));

下面结果是一样

    osg::Matrix mtrixxttt;mtrixxttt.makeScale(osg::Vec3(2, 3,3));osg::Matrix mtrixxppp = osg::Matrix::scale(osg::Vec3(2, 3, 3));

之所以一样是因为下面,




 下面两段代码是一样的,旋转90移动15,然后再转90然后再移动15

    osg::Matrix mtrixx;mtrixx.makeRotate(90 / 180.f * osg::PI, osg::Vec3(0, 1, 0));tr->setMatrix(mtrixx * tr->getMatrix());mtrixx.makeTranslate(osg::Vec3(15, 0, 0));tr->setMatrix(mtrixx * tr->getMatrix());mtrixx.makeRotate(90 / 180.f * osg::PI, osg::Vec3(0, 1, 0));tr->setMatrix(mtrixx * tr->getMatrix());mtrixx.makeTranslate(osg::Vec3(15, 0, 0));tr->setMatrix(mtrixx * tr->getMatrix());
    osg::Matrix mtrixx;tr->setMatrix(osg::Matrix::rotate(90 / 180.f * osg::PI, 0, 1, 0) * tr->getMatrix());tr->setMatrix(osg::Matrix::translate(osg::Vec3(15, 0, 0)) * tr->getMatrix());tr->setMatrix(osg::Matrix::rotate(90 / 180.f * osg::PI, 0, 1, 0) * tr->getMatrix());tr->setMatrix(osg::Matrix::translate(osg::Vec3(15, 0, 0)) * tr->getMatrix());




牛的局部坐标是这样的 



下面做一个实验 ,先构建这个关系,然后只比较位置

然后在通过,下面值比较一下两者的区别

m_rpMtPosition->setMatrix(osg::Matrix::translate( osg::Vec3d(xx,xx,xx)));

m_rpPATposition->setPosition( osg::Vec3d(xx,xx,xx));

#include<osgViewer/Viewer>
#include<osgDB/ReadFile>
#include <osg/MatrixTransform>
#include <osg/PositionAttitudeTransform>
int main(int argc, char** argv)
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;osg::ref_ptr<osg::Group> root = new osg::Group;osg::ref_ptr<osg::Node> cow = osgDB::readNodeFile("cow.osg");osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform;osg::ref_ptr<osg::PositionAttitudeTransform> pt = new osg::PositionAttitudeTransform;mt->setMatrix(osg::Matrix::translate(15, 0, 0)); //先移动15mt->setMatrix(osg::Matrix::translate(15, 0, 0)*mt->getMatrix()); //在现有基础上再移动15mt->setMatrix(osg::Matrix::rotate(osg::PI/2,0, 1, 0) * mt->getMatrix()); //在现有基础上再移动15mt->setMatrix(osg::Matrix::translate(15, 0, 0) * mt->getMatrix()); //在现有基础上往x轴再移动15pt->setPosition(osg::Vec3(15,0,0));mt->addChild(cow);pt->addChild(cow);root->addChild(mt);root->addChild(pt);root->addChild(cow);viewer->setSceneData(root.get());viewer->realize();viewer->run();return 0;
}






  下面说明  setMatrix  相对于父节点移动

#include<osgViewer/Viewer>
#include<osgDB/ReadFile>
#include <osg/MatrixTransform>
#include <osg/PositionAttitudeTransform>
int main(int argc, char** argv)
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;osg::ref_ptr<osg::Group> root = new osg::Group;osg::ref_ptr<osg::Node> cow = osgDB::readNodeFile("cow.osg");osg::ref_ptr<osg::MatrixTransform> mt1 = new osg::MatrixTransform;osg::ref_ptr<osg::MatrixTransform> mt2 = new osg::MatrixTransform;mt1->setMatrix(osg::Matrix::translate(-30, 0, 0)); //mt1先左移30mt2->setMatrix(osg::Matrix::translate(30, 0, 0)); //mt2再往右移动30mt2->addChild(cow);mt1->addChild(mt2);root->addChild(mt1);root->addChild(cow);viewer->setSceneData(root.get());viewer->realize();viewer->run();return 0;
}


http://www.ppmy.cn/ops/123162.html

相关文章

深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)

前言 前几天在看论文&#xff0c;打算复现&#xff0c;论文用到了LSTM&#xff0c;故这一篇文章是小编学LSTM模型的学习笔记&#xff1b;LSTM感觉很复杂&#xff0c;但是结合代码构建神经网络&#xff0c;又感觉还行&#xff1b;本次学习的案例数据来源于GitHub&#xff0c;在…

OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【内存调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 内存调测 内存调测方法旨在辅助定位动态内存相关问题&#xff0c;…

科普篇 |DNS负载均衡的原理是什么?有哪些优秀的方案?

在当今数字化时代&#xff0c;网络规模和流量需求不断增长&#xff0c;催生了对高可用性和高效管理的需求。DNS负载均衡作为一种常用的负载均衡技术&#xff0c;通过将域名解析到多个IP地址&#xff0c;实现了对服务器的负载均衡。阿祥将详细解析DNS负载均衡的原理、优缺点以及…

睡眠对于生活的重要性

在快节奏的现代生活中&#xff0c;健康养生不再是遥不可及的概念&#xff0c;而是融入日常每一刻的必需。其中&#xff0c;睡眠作为生命不可或缺的环节&#xff0c;其重要性往往被忽视&#xff0c;实则它是身体修复、能量积蓄的黄金时段。今天&#xff0c;让我们深入探讨“健康…

全国消防知识竞赛活动方案哪家强

关键词&#xff1a;消防安全、预防火灾、消防意识、消防员、防火安全 适合行业&#xff1a;所有行业 推荐功能&#xff1a;答题、投票、H5 宣传角度 1.从日常生活场景出发&#xff0c;指导大家如何检查家庭中的火灾隐患。例如检查电线是否老化、插座是否过载、是否在楼梯间…

Java中JWT(JSON Web Token)的运用

目录 1. JWT的结构2. JWT的优点3. JWT的流转过程4.具体案例一、项目结构二、依赖配置三、用户模型四、JWT工具类五、JWT请求过滤器六、安全配置七、身份验证控制器八、测试JWT JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#…

python和r语言的区别是什么

在从事数据分析行业中&#xff0c;我们都会从R与Python当中进行选择&#xff0c;但是&#xff0c;从这两个异常强大、灵活好用的数据分析语中选择&#xff0c;却是非常难以选择的。 为了让大家能选择出更适合自己的语言&#xff0c;我们将两种语言进行简单的对比。 Stack Ove…

leetcode 93.复原ip地址

1.题目要求&#xff1a; 2.题目代码: class Solution { public:vector<string> result;// 记录结果// startIndex: 搜索的起始位置&#xff0c;pointNum:添加逗点的数量void backtracking(string& s, int startIndex, int pointNum) {if (pointNum 3) { // 逗点数…