[原][osg][osgEarth]osg::Matrix 父子节点的变化关系
//osg::Matrix offsetmatrix 计算出子节点在父节点下的绝对坐标
//osg::Matrix offposition 用来计算当前节点相对父节点的位置
osg::Matrix offsetmatrix;
offsetmatrix.setTrans(newposition3);
offsetmatrix.preMultRotate(fatherquat);
offsetmatrix.preMultRotate(itr->_quatOffsetRotate); osg::Matrix offposition;
offposition.setTrans(itr->_v3OffsetPosition);
offposition.postMultRotate(fatherquat);
offsetmatrix.postMultTranslate(offposition.getTrans()); //此段代码每帧都调用来实现子节点跟随父节点运动,并实现相对偏移和旋转
直接上代码
我目前做的是spark粒子的喷射器跟随osgEarth上一个节点一起运动
并在父节点的基础上做相对偏移,用来做车尾尘,飞机尾焰等特效。
代码片段是写在
SparkUpdatingHandler::handle中的
目的是更新spark喷射器的位置。
有几点要注意的:
1.spark的节点是挂在一个不动的节点下面的,不是挂在动的“父节点”(如飞机等)下面,然后更新spark的喷射器一直跟随“父节点”(飞机)。
2.由于在osgEarth中,“父节点”(飞机等)在空间的位置非常大,spark当前真正的父节点也是偏移在(飞机等节点)附近的。然后更新的位置是相对位置。
[原][osg][osgEarth]osg::Matrix 父子节点的变化关系的更多相关文章
- [osg][osgearth]osg的分页加载,代码和结构图
DatabasePager加载数据的过程: 多线程 使用DatabasePager加载数据的流程: 左侧的图框表示数据的检索和输入, 中间的白色框表示用于数据存储的内存空间,而右边的图框表示存储数据的 ...
- [osg][osgEarth][原]基于OE自定义自由飞行漫游器(第二版)
在初级版上,进行新的漫游方式调整 头文件: #pragma once //南水之源 20180101 #include <osgGA/CameraManipulator> #include ...
- [osg][osgEarth][原]基于OE自定义自由飞行漫游器(初级版)
由于受够了OE的漫游器,想搞个可以在全球飞行的漫游器,所以就做了一个: 请无视我的起名规则······ 类头文件:EarthWalkManipulator.h #pragma once //南水之源 ...
- [原][osg][osgEarth]EarthManipulator关于oe漫游器的handle部分解读以及修改(仿照谷歌,修改oe漫游器中focal(视角切换)功能 续 二)
bool EarthManipulator::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) ...
- [原][osg][osgearth]简单的通过osgDB,读取高程tif,修改高程tif
ReadResult result; osg::ref_ptr<osgDB::ReaderWriter> reader = osgDB::Registry::instance()-> ...
- osg::NodeVisitor中计算一个节点对应的世界变换矩阵、法向量、顶点坐标
class MyNodeVisitor:public osg::NodeVisitor { pulic: MyNodeVisitor():osg::NodeVisitor(osg::NodeVisit ...
- [原][OSG]深入osg函数----SceneView::cull 函数
参考:最长一帧 先介绍几个类: osgUtil::CullVisitor:“筛选访问器” 当我们使用它遍历场景图形的各个节点时, CullVisitor 将会对每一个遇到的节点执行场景筛选的工作,判断 ...
- OSG学习:位置变换节点示例
osg::PositionAttitudeTransform节点. #include <osgViewer\Viewer> #include <osg\Node> #inclu ...
- [原][osg][QT]osg与QT界面结合的简单例子二
//main.cpp #include "VREObliqueEditorQTWindow.h" #include <QtWidgets/QApplication> # ...
随机推荐
- Linear Regression Using Least Squares Method 代码实现
1. 原理 2. Octave function theta = leastSquaresMethod(X, y) theta = pinv(X' * X) * X' * y; 3. Python # ...
- js 数组循环和迭代
(之前一直没怎么注意数组循环,今天做一道题时,用到forEach循环发现它并没有按照我想象的样子执行,总结一下数组循环) 一.第一种方法就是for()循环 for( var index = 0; ...
- js时钟
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vmware tool安装
https://www.vmware.com/support/ws55/doc/ws_newguest_tools_linux.html VMware Workstation 5.5 Features ...
- #C++初学记录(算法3)
C - 不要62 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...
- tfs使用流程
1.用邮箱注册个微软账号,如zhangsan@outlook.com等邮箱 2.管理员会添加此用户zhangsan@outlook.com 3.打开vs,team-tfs-connect to ser ...
- mysql的Navicat查看数据库的ER图
1.mysql数据库表间的关系图可以通过navicat查看.
- AppiumDriverLocalService 启动appium控制台不显示日志以及把日志保存到本地
import java.io.File; import java.io.OutputStream; import java.lang.reflect.Field; import java.util.A ...
- python 类的私有方法例子
#coding=utf-8 class Person(object): id=12 def __init__(self,name): self.name=name ...
- redis安装及注意事项
在linux中使用wget时,若报-bash: wget: command not found,则表明没有安装wget,需要安装,安装命令如下: yum -y install wget 安装完成即可以 ...