osg节点函数功能汇总
1 virtual Object * cloneType () const
说明:只是返回一个和调用对象类型相同的同类型对象,仅此而已,调用对象的其它属性等不拷贝。如下代码:
int main(int argc, char** argv)
{
osg::ref_ptr<osgViewer::Viewer> spViewer = new osgViewer::Viewer();
osg::ref_ptr<osg::Group> spRoot = new osg::Group();osg::ref_ptr<osg::Node>spNode = osgDB::readNodeFile("cow.osg");
spRoot->addChild(spNode);osg::ref_ptr<osg::Node>spNodeCopy = (osg::Node*)spNode->cloneType();
osg::ref_ptr <osg::PositionAttitudeTransform>spPositionAttitudeTransform = new osg::PositionAttitudeTransform();
spPositionAttitudeTransform->addChild(spNodeCopy);
spPositionAttitudeTransform->setPosition(osg::Vec3d(10, 0, 0));
spRoot->addChild(spPositionAttitudeTransform);spViewer->setSceneData(spRoot);return spViewer->run();
}
spNode读入了cow.osg,利用spNode的cloneType()函数拷贝了一个新节点spNodeCopy,再把spNodeCopy加入到场景,这个时候场景中是不会显示奶牛的,因为查看cloneType()
的定义:
virtual Object* cloneType() const { return new Node(); }
发现它仅仅是返回了一个和 spNode类型相同的对象,spNode的其它属性,比如奶牛模型等并没有拷贝。
2 virtual Object * clone (const CopyOp ©op) const
说明:拷贝,参数代表拷贝类型。返回该Node的一个拷贝,拷贝类型。对于Node有枚举值:osg::CopyOp::SHALLOW_COPY,osg::CopyOp::SHALLOW_COPY等
int main(int argc, char** argv)
{osg::ref_ptr<osgViewer::Viewer> spViewer = new osgViewer::Viewer();osg::ref_ptr<osg::Group> spRoot = new osg::Group();osg::ref_ptr<osg::Node>spNode = osgDB::readNodeFile("cow.osg");spRoot->addChild(spNode);osg::ref_ptr<osg::Node>spNodeCopy = (osg::Node*)spNode->clone(osg::CopyOp::DEEP_COPY_ALL );osg::ref_ptr <osg::PositionAttitudeTransform>spPositionAttitudeTransform = new osg::PositionAttitudeTransform();spPositionAttitudeTransform->addChild(spNodeCopy);spPositionAttitudeTransform->setPosition(osg::Vec3d(10, 0, 0));spRoot->addChild(spPositionAttitudeTransform);spViewer->setSceneData(spRoot);return spViewer->run();}
如上的代码,深度拷贝了一个spNode相同的节点spNodeCopy ,此时spNodeCopy 和spNode各自有一份独立且各种属性完全相同的数据,此时视图会显示两头奶牛,注意和cloneType()函数的区别。
3 virtual bool isSameKindAs (const Object *obj) const
说明:判断两类是否为一个类型,父类与子类应该算做同一类型。若为同一类型则返回真,否则返回假,obj需要判断与Node是否为同一类型的类。如下代码:
int main(int argc, char** argv)
{osg::ref_ptr<osgViewer::Viewer> spViewer = new osgViewer::Viewer();osg::ref_ptr<osg::Group> spRoot = new osg::Group();osg::ref_ptr<osg::Node>spNode = osgDB::readNodeFile("cow.osg");spRoot->addChild(spNode);bool b = spRoot->isSameKindAs(spNode.get());bool a = spRoot->isSameKindAs(spViewer.get());spViewer->setSceneData(spRoot);return spViewer->run();}
此时b为true;a为false;
4、virtual const char * libraryName () const
说明:返回Node的库文件名。
5、virtual const char * className () const
说明:返回Node的类类型名。
6、virtual Group * asGroup ()
virtual const Group * asGroup () const
说明:把该Node当作一个Group来用,返回指向Group指针,从而具有Group的方法,也可以强制转换。
7、virtual Transform * asTransform ()
virtual const Transform * asTransform () const
说明:把该Node当作一个Transform来用,返回指向Transform的指针,从而具有Transform的方法。
8、virtual void accept (NodeVisitor &nv)
virtual void ascend (NodeVisitor &nv)
virtual void traverse (NodeVisitor &)
说明:表示接受NodeVisitor的遍历。第一个表示接受遍历,一般表示全遍历。第二个表示向上遍历。第三个表示向下遍历,参数nv表示访问器。是个很重要的工具。
9、const ParentList & getParents () const
ParentList getParents ()
说明:返回Node的父母结点列表,因为可能有多个父母结点。ParentList 是一个std::vector<Group*>.
10、Group * getParent (unsigned int i)
const Group * getParent (unsigned int i) const
说明:根据索引值,找到第i个父结点。
12、unsigned int getNumParents () const
说明:得到父结点的个数。
13、NodePathList getParentalNodePaths (osg::Node *haltTraversalAtNode=0) const
说明:允许得到该结点在某个结点之上的父结点路径。返回一个结点列表,设置一个结点,遍历该结点之上的父结点路径。默认值为0,表示从当前结点自己开始遍历。该参数一般肯定为当前结点的某个父结点才有意义。具体详解参见《getParentalNodePaths、osg::NodePathList、osg::NodePath详解》
14、MatrixList getWorldMatrices (osg::Node *haltTraversalAtNode=0) const
说明:得到让该结点在某个结点之上的父结点发生Matrix操作的矩阵结点列表。设置一个结点,遍历使该结点之上的父结点发生Matrix操作的路径。默认值为0,表示从当前结点自己开始遍历。该参数一般肯定为当前结点的某个父结点才有意义。
15、void setUpdateCallback (NodeCallback *nc)
说明:设置一个更新回调,nc为回调函数名。
16、NodeCallback * getUpdateCallback ()
const NodeCallback * getUpdateCallback () const
说明:返回更新回调指针。
17、unsigned int getNumChildrenRequiringUpdateTraversal () const
说明:得到设置了更新回调的子结点数目。
18、void setEventCallback (NodeCallback *nc)
说明:设置事件回调,nc为事件回调参数指针。
19、NodeCallback * getEventCallback ()
const NodeCallback * getEventCallback () const
说明:得到事件回调指针。返回该指针。
20、unsigned int getNumChildrenRequiringEventTraversal () const
说明:得到设置了事件回调的子结点数目。
21、void setCullCallback (NodeCallback *nc)
说明:设置拣选回调。
22、NodeCallback * getCullCallback ()
const NodeCallback * getCullCallback () const
说明:得到拣选回调指针。返回拣选回调指针。
23、void setCullingActive (bool active)
说明:是否开启拣选。
24、bool getCullingActive () const
说明:得到拣选开启的状态。如果开启,则返回真,否则返回假。
25、unsigned int getNumChildrenWithCullingDisabled () const
说明:得到没有开启拣选的子结点数目。返回该数目。
26、bool containsOccluderNodes () const
说明:看是否包含遮档结点。遮档结点往往是一个几何形状,用于档后面的结点。
27、void setNodeMask (NodeMask nm)
说明:设置结点是否隐藏。如果nm为0则代表隐藏,否则代表显示,nm为0时表示隐藏,为非零时表示显示。
28、NodeMask getNodeMask () const
说明:得到结点状态,是显示,还是隐藏。如为0则表示隐藏,否则表示显示中。
29、void setDescriptions (const DescriptionList &descriptions)
说明:设置结点描述。往往为一个字符串来表述结点,结点描述,为一个字符串。序列。std::vector<std::string>
30、DescriptionList & getDescriptions ()
const DescriptionList & getDescriptions () const
const std::string & getDescription (unsigned int i) const
std::string & getDescription (unsigned int i)
说明:得到结点描述,返回为一个字符串序列std::vector<std::string>。有参数i的表示得到第i个描述,因为描述是一个序列,表示得到第i个描述。返回字符串string。
31、unsigned int getNumDescriptions () const
说明:得到结点描述个数。
32、void addDescription (const std::string &desc)
说明:添加一个描述。
33、void setStateSet (osg::StateSet *stateset)
说明:设置状态设置。状态设置关系到OpenGL当中所有的状态。
34、osg::StateSet * getOrCreateStateSet ()
说明:得到或者创建状态指针。一旦返回该指针,该指针便可与该结点关联,改变该指针就会改变该结点的状态值。
35、osg::StateSet * getStateSet ()
const osg::StateSet * getStateSet () const
说明:得到状态指针,如果没有绑定过,则返回空。
36、void setInitialBound (const osg::BoundingSphere &bsphere)
说明:设置初始包围球。参数表示一个包围球。如果dirty了,将会改变该球的值。等于关联了一个球球。
37、const BoundingSphere & getInitialBound () const
说明:得到初始球。返回该球球的引用。
38、void dirtyBound ()
说明:要求计算包围球球。
39、const BoundingSphere & getBound () const
说明:得到包围球球。
40、virtual BoundingSphere computeBound () const
说明:计算包围球球。
41、void setComputeBoundingSphereCallback (ComputeBoundingSphereCallback *callback)
说明:设置包围球回调,当计算包围球时会调用该函数,该参数为回调指针。
42、ComputeBoundingSphereCallback * getComputeBoundingSphereCallback () const
说明:得到计算包围球回调。得到一个回调指针。
43、virtual void setThreadSafeRefUnref (bool threadSafe)
说明:设置是否查看ref以及unref的线程安全性,为真表示查看,为假表示不查看。
44、virtual void resizeGLObjectBuffers (unsigned int)
说明:重新设置GL对象Buffer的大小为指定大小,Buffer的大小值,会修改到每个Buffer.
45、virtual void releaseGLObjects (osg::State *=0) const
说明:释放GL对象。如果State不为0则只释放与之有关联的对象,从而释放与之有关联的上下文。否则会为释放一切图像上下文释放一切对象。
二、osg::Group类
类描述:对结点起到组织作用,一般做为父结点或者根结点出现。它允许有一系列的孩子,相同的孩子或者孩子之间有引用重得加入的会共享内存,是通过父类osg::Referenced实现自动管理内存句柄的。它继承与osg::Node
1、Group ()
Group (const Group &, const CopyOp ©op=CopyOp::SHALLOW_COPY)
说明:构造函数。第二个构造函数意思为从一个已知的Group构造新的Group。参数表示拷贝类型,默认是浅拷贝,拷贝类型,默认为浅拷贝,可以是深拷贝:DEEP_COPY_OBJECTS
2、virtual Group * asGroup ()
virtual const Group * asGroup () const
说明:返回一个Group指针,这是为了提供给子类所使用的。当对象为非指针时也可以使用。
3、virtual void traverse (NodeVisitor &nv)
说明:接受一个NodeVisitor向上遍历访问,nv为访问器参数,注意传入为引用类型。
4、virtual bool addChild (Node *child)
说明:添加一个孩子到组结点。如果添加成功则返回真。
5、virtual bool insertChild (unsigned int index, Node *child)
说明:插入一个结点到第index个结点后面。如果插入成功,则返回真,否则返回假。
6、bool removeChild (Node *child)
bool removeChild (unsigned int pos, unsigned int numChildrenToRemove=1)
说明:移除某个孩子,移除成功则返回真,否则返回假。第一函数为以某个孩子的指针为参数移除它。第二个是以第pos个孩子为参数移除pos之后的numChildrenToRemove个,要删除的孩子指针值。
7、virtual bool removeChildren (unsigned int pos, unsigned int numChildrenToRemove)
说明:删除一些孩子,从第pos个孩子后删除一些孩子。numChildrenToRemove要删除的孩子数量。
8、virtual bool replaceChild (Node *origChild, Node *newChild)
说明:使用某个结点,代替某个孩子,origChild表示旧孩子,就是被替掉的那个孩子。newChild表示新孩子,要顶上去的孩子。
9、unsigned int getNumChildren () const
说明:得到该组的孩子数量。返回孩子数量值。
10、virtual bool setChild (unsigned int i, Node *node)
说明:设置第i个孩子为node值,要设置的group的第i个孩子。node表示要设置的值。
11、Node * getChild (unsigned int i)
const Node * getChild (unsigned int i) const
说明:得到第i个孩子。返回第i个孩子的指针。
12、bool containsNode (const Node *node) const
说明:判断该组是否包含参数所指node.如果包含则返回真,否则返回假。
13、unsigned int getChildIndex (const Node *node) const
说明:得到参数所指node的索引值。返回该索引值。
14、virtual void setThreadSafeRefUnref (bool threadSafe)
说明:设置是否查看ref以及unref的线程安全性,threadSafe为真表示查看,为假表示不查看。
15、virtual void resizeGLObjectBuffers (unsigned int)
说明:重新设置GL对象Buffer的大小为指定大小。
16、virtual void releaseGLObjects (osg::State *=0) const
说明:释放GL对象。如果State不为0则只释放与之有关联的对象,从而释放与之有关联的上下文。否则会为释放一切图像上下文释放一切对象,
三、osg::Switch类
类说明:Switch是一个管理类,它下面可以有很多子类,它就像是一个开关可以控制子类的显示与隐藏,而这种隐藏是不耗费内存的,与SetNodeMask对比有明显的优势,SetNodeMask事实上只是隐藏了结点,但结点仍被绘制。该类是从Node和Group派生而来,故可以被加入组结点以及asGroup等等种种方法。是一个非常常用的类。
1、Switch ()
Switch (const Switch &, const CopyOp ©op=CopyOp::SHALLOW_COPY)
说明:构造函数。第二个构造函数为从已知的Switch构造出新的Switch。拷贝类型为参数二控制。默认值为浅拷贝,深拷贝为:DEEP_COPY_OBJECTS
2、META_Node (osg, Switch)
说明:是一个宏,宏中定义了标准Clone,且具有isSameAs,ClassName,accept三个重要方法。目的是让从Node派生的子类方便的定义所需要的纯虚方法。
3、virtual void traverse (NodeVisitor &nv)
说明:设置向下遍历器,一般为从该结点向下开始遍历。
4、void setNewChildDefaultValue (bool value)
说明:设置新孩子加入时的默认值是显示还是开还是关。如果value为真表示开,为假表示关。
5、bool getNewChildDefaultValue () const
说明:得到新加入结点默认开关值,如果默认为开,则返回真,否则返回假。
6、virtual bool addChild (Node *child)
virtual bool addChild (Node *child, bool value)
说明:添加一个孩子到开关中。添加成功则返回真,添加失败则返回假。添加失败可能会由于空指针或者该node已被包含在组结点当中。
7、virtual bool insertChild (unsigned int index, Node *child)
virtual bool insertChild (unsigned int index, Node *child, bool value)
说明:插入一个孩子到index值后。可以设置开关值。插入成功则返回真,否则返回假。如果该孩子为空或者已经在组中,则会返回假。
8、virtual bool removeChildren (unsigned int pos, unsigned int numChildrenToRemove)
说明:从第pos开始,移除numChildrenToR个孩子结点。
9、void setValue (unsigned int pos, bool value)
说明:设置第pos个值的结点的开关值,如果value为真表示开,如果为假表示关。
10、bool getValue (unsigned int pos) const
说明:返回第Pos个孩子的开关值。开则返回真,关则返回假。
11、void setChildValue (const Node *child, bool value)
说明:设置孩子开关值,以结点指针为参数。如果value为真则设置为开,否则设置为关。
12、bool getChildValue (const Node *child) const
说明:得到孩子的开关值,以孩子指针做为参数。
13、bool setAllChildrenOff ()
说明:关闭所有孩子。如果关闭成功则返回真,否则返回假。
14、bool setAllChildrenOn ()
说明:打开所有孩子,如果打开成功则返回真,否则返回假。
15、bool setSingleChildOn (unsigned int pos)
说明:设置单个孩子的开关开启和关闭。设置成功返回真,否则返回假。
16、void setValueList (const ValueList &values)
说明:为开关孩子序列设置一个布尔序列来完成设置值,开关序列,定义为std::vector<bool>
17、const ValueList & getValueList () const
说明:得到开关孩子序列的开关值序列。
18、virtual BoundingSphere computeBound () const
说明:计算包围球,返回开关所有开启子结点的总包围球。
四、osg::MatrixTransform类
类说明:这是一个最常用的移动结点的类,可以随动,旋转控制结点。这些操作都是乘矩阵得到。
1、MatrixTransform ()
MatrixTransform (const MatrixTransform &, const CopyOp ©op=CopyOp::SHALLOW_COPY)
MatrixTransform (const Matrix &matix)
说明:构造函数,第二个构造函数为从一个现有MatrixTransform来构造新的MatrixTransform。可以确定拷贝类型,默认为浅拷贝,可以为深拷贝:DEEP_COPY_OBJECTS。而第三个构造函数为从一个matrix来构造一个MatrixTransform.
2、META_Node (osg, Switch)
说明:是一个宏,宏中定义了标准Clone,且具有isSameAs,ClassName,accept三个重要方法。目的是让从Node派生的子类方便的定义所需要的纯虚方法。
3、virtual MatrixTransform * asMatrixTransform ()
virtual const MatrixTransform * asMatrixTransform () const
说明:返回一个MatrixTransform的指针,如果是对象是可以这样使用,或是其父类的其它类型。
4、void setMatrix (const Matrix &mat)
说明:这个方法非常重要,是里面最重要的方法,里面有很多的惯用法。其中格式都是这样的:mat.setMatrix(osg::Matrix::Transform(x,y,z)),其中osg::Matrix::Scale以及osg::Matrix::Rotate也可以被用在其中,并且可以相乖叠加。这样就设置了mat的矩阵。然后把node加入到mat中,再把mat加入到Group中。
5、const Matrix & getMatrix () const
说明:得到已经设置的矩阵值。返回一个矩阵的引用。
6、void preMult (const Matrix &mat)
void postMult (const Matrix &mat)
说明:preMult的意思为前乘矩阵,postMult的意思为后乘矩阵。
7、const Matrix & getInverseMatrix () const
说明:得到逆矩阵。
8、virtual bool computeLocalToWorldMatrix (Matrix &matrix, NodeVisitor *) const
virtual bool computeWorldToLocalMatrix (Matrix &matrix, NodeVisitor *) const
说明:把NodeVisitor所指结点由局部坐标系统转向世界坐标系统 ,或由世界坐标系统转向局部坐标系统。得到矩阵值,矩阵值也可以转换为坐标,转换成功返回true,失败返回false.
osg节点函数功能汇总相关推荐
- matlab中函数功能汇总(一)——rectangle、bwlabel、regionprops
文章目录 前言 一.rectangle 二.bwlabel 三.regionprops 写在最后 前言 由于最近在学习MATLAB,在使用函数的时候总是要找很久,而且每次用到都要到处去搜,一直都希望有 ...
- EXCEL表格常用函数功能汇总
1.相对引用与绝对引用 相对引用:引用单元格的相对地址,即引用单元格的位置关系是相对的,默认情况下,新公式使用的是相对引用.填充柄无论向上,向下,向左,向右拖动,它会引用它相对位置的内容. 绝对引用: ...
- Python内置函数功能汇总
本文按函数字母顺序归纳知识点: abs(x):返回x的绝对值 all(iterable):集合中元素都为真是返回True,反之返回False any(iterable):集合中的元素有一个 为真时为真 ...
- Python 内置函数功能汇总
68个内置函数 分类记忆 数学运算 × 7 abs() . divmod() . max() . min() .pow() .round() .sum() 类型转换 × 24 bool() . int ...
- oracle 不等函数,SQL(Oracle)日常使用与不常使用函数的汇总
--日常使用的sql语句和oracle语句,有些相对使用的频率比较高,收藏起来还是比较值得的 -- 绝对值 SQL:select abs(-1) value Oracle:select abs(-1) ...
- tf.pad函数功能介绍
tf.pad()函数主要是对张量在各个维度上进行填充,该函数的参数如下所示: pad(tensor,paddings,mode='CONSTANT',name=None ) 其中: tensor是待填 ...
- mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总
前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...
- Python嵌套定义函数增强reduce()函数功能
技术要点: 1)Python允许嵌套定义函数. 2)functools标准库中的reduce()函数第一个参数可以是函数或lambda表达式,这个函数必须接收两个参数. 下面的代码实现任意进制的按权展 ...
- hive 强转为string_Hive的条件函数与日期函数全面汇总解析
点击上方蓝字 关注我们 在Hive的开窗函数实战的文章中,主要介绍了Hive的分析函数的基本使用.本文是这篇文章的延续,涵盖了Hive所有的条件函数和日期函数,对于每个函数,本文都给出了具体的解释和 ...
最新文章
- Nginx与PHP(FastCGI)的安装、配置、优化
- django安装mysql驱动
- 聚焦3D地形编程第五章GeomipMapping for the CLOD
- 使用录制宏制作工资条
- IDA __OFSUB__ 测试
- [总结]Jquery api 快速参考
- C++读图片——Mac下对于bmp文件读写读取过大的解决方案
- 编写sonar 插件:No SqaleSubCharacteristic annotation was found on class xxx
- java中异常+连接重置_java.net.SocketException:连接重置
- 替换后的最长重复字符
- 要成为物联网的paas平台,需要哪些条件做为支撑?
- Linux系统IO端口,Linux系统对IO端口和IO内存的管理
- ATM机为什么不能存100张?
- 内联css加伪元素,使用CSS:前和:后内联CSS伪元素?(Using CSS :before and :after p
- 【快代理API】获取隧道代理IP
- 从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
- Java基础项目——基于文本家庭简易收支记账程序
- HI3559A系统卡死问题-修复
- 单板嵌入式计算机定义,用于嵌入式控制系统的单板计算机
- 男人开始对情人腻了的4种表现,别傻傻的不懂
热门文章
- 常见人名大全_生辰八字起名取名:2020年属鼠的女孩起名字大全
- mysql建库语句on报错_mysql运维必备知识点(转载至其他作者)
- lin通信ldf文件解析_手把手教你在CANoe中创建一个LIN通讯工程
- linux postfix 日志,linux – 如何计算Postfix的mailq的消息?
- markdown 换行_markdown傻瓜指南(github)
- 伪分布式hbase数据迁移汇总
- 将权限组件应用到新项目
- Linux 基础——权限管理命令chmod
- Mahout实战---运行第一个推荐引擎
- PL/SQL Developer下设置“长SQL自己主动换行”