OSG 中 相交測试 模块 工作流程及原理

主要涉及三个类:

1. osgUtil::PolytopeIntersector // 详细不同算法实现类

2. osgUtil::IntersectionVisitor //用来遍历节点树的每一个节点

3.osg::Node * mNode;  //  你要做相交測试的根节点

先看使用方法:

osg::ref_ptr<osgUtil::PolytopeIntersector> intersector = new osgUtil::PolytopeIntersector(osgUtil::Intersector::WINDOW, xMin, yMin, xMax, yMax);
intersector->setIntersectionLimit(osgUtil::Intersector::LIMIT_ONE_PER_DRAWABLE);
osgUtil::IntersectionVisitor iv( intersector.get() );

mRootNode->accept(iv);

关系

osgUtil::IntersectionVisitor 中含有一个osgUtil::PolytopeIntersector的实例化对象。功能是主要负责遍历每一个节点,然后把每一个节点的信息传入到  osgUtil::PolytopeIntersector  中

(含有一系列的apply方法)如:

void IntersectionVisitor::apply(osg::Group& group)
{
    if (!enter(group)) return;

    traverse(group);

    leave();
}

void IntersectionVisitor::apply(osg::Geode& geode)
{
    // OSG_NOTICE<<"apply(Geode&)"<<std::endl;

    if (!enter(geode)) return;

    // OSG_NOTICE<<"inside apply(Geode&)"<<std::endl;

    for(unsigned int i=0; i<geode.getNumDrawables(); ++i)
    {
        intersect( geode.getDrawable(i) );
    }

    leave();
}

当中enter、leave 、intersect 函数中又会反过来调用 osgUtil::PolytopeIntersector 中对应的方法,如:

 inline bool enter(const osg::Node& node) { return _intersectorStack.empty() ? false : _intersectorStack.back()->enter(node); }
        inline void leave() { _intersectorStack.back()->leave(); }
        inline void intersect(osg::Drawable* drawable) { _intersectorStack.back()->intersect(*this, drawable); }
        inline void push_clone() { _intersectorStack.push_back ( _intersectorStack.front()->clone(*this) ); }
        inline void pop_clone() { if (_intersectorStack.size()>=2) _intersectorStack.pop_back(); }

这样差点儿全部的算法都集中到了 osgUtil::PolytopeIntersector 中 intersect 方法中

void PolytopeIntersector::intersect(osgUtil::IntersectionVisitor& iv, osg::Drawable* drawable)

假设想写自己的相交測试算法,也基本上仅仅需重写intersect 函数就可以。

时间: 2024-08-05 02:30:30

OSG 中 相交測试 模块 工作流程及原理的相关文章

OSG 中 相交测试 模块 工作流程及原理

主要涉及三个类: 1. osgUtil::PolytopeIntersector // 具体不同算法实现类 2. osgUtil::IntersectionVisitor //用来遍历节点树的每个节点 3.osg::Node * mNode;  //  你要做相交测试的根节点 先看用法: osg::ref_ptr<osgUtil::PolytopeIntersector> intersector = new osgUtil::PolytopeIntersector(osgUtil::Inter

DNS工作流程及原理 域名、IP与DNS的关系

转自:http://blog.csdn.net/maminyao/article/details/7390208 一.DNS服务概述 DNS是Domain Name System的缩写,即域名系统.其实,DNS是internet的一项服务,一般叫域名服务或者域名解析服务,主要提供网站域名与IP地址的相互转换的服务.域名解析分文争相解析与反向解析,正向解析是将主机名转换成IP地址的过程,域名的反向解析是将IP地址转换成主机名的过程.通常我们很少需要将IP地址转换成主机名.其中,反向解析经常被一些后

struts2核心工作流程与原理

Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架.Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品.   上图来源于Struts2官方站点,是Struts 2 的整体结构. 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomca

Maven项目中mvn clean后找不到測试类问题

在Maven项目中进行单元測试,但mvn clean后又一次mvn install项目,再次进行单元測试.会有下面的错误. <span style="font-family:KaiTi_GB2312;font-size:18px;">Class not found com.core.order.service.impl.OrderServiceImplTest java.lang.ClassNotFoundException: com.core.order.service.

软件測试计划模板

第1章 引言 1.1目的 简述本计划的目的,旨在说明各种測试阶段任务.人员分配和时间安排.工作规范等. 測试计划在策略和方法的高度说明怎样计划.组织和管理測试项目.測试计划包括足够的信息使測试人员明确项目须要做什么是怎样运作的.另外,清晰的文档结构能使不论什么一个读者在浏览计划的前面几页后,就能对项目有一个大概的认识.測试计划仅仅是測试的一个框架,非常多细节须要跟开发者或其它人员沟通,因此计划不包括測试用例的细节和系统功能的具体信息.在计划目的中须要指明读者对象. 1.2名词解释 列出本计划中使

单元測试和白盒測试相关总结

一.  软件測试方法 1.        软件測试方法包含:白盒測试(White  Box  Testing).黑盒測试(Black  Box Testing).灰盒測试.静态測试.动态測试. 2.        白盒測试:是一种測试用例设计方法.在这里盒子指的是被測试的软件,白盒.顾名思义即盒子是可视的,你能够清晰盒子内部的东西以及里面是怎样运作的.因此白盒測试须要你对系统内部的结构和工作原理有一个清晰的了解,并且基于这个知识来设计你的用例. 白盒測试技术一般可被分为静态分析和动态分析两类技术

软件測试基本方法(六)之集成測试和系统測试

在软件开发中.常常会遇到这种情况.单元測试时确认每一个模块都能单独工作,但这些模块集成在一起之后会出现有些模块不能正常工作.比如,在chrome环境下用js写了一个实时捕捉video中特定区域的模块,正常工作:利用worker线程进行webgl场景渲染,也正常.但是当两个运算合并时.出现一个模块不能正常执行,原因在于两个模块不适合在worker线程中结合.基于worker本身的局限性,仅仅能有一个模块正常工作. 所以,非常有必要进行集成測试. (1)集成測试定义: 集成測试是将软件集成起来,对模

C语言单元測试

对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有这么几个工具: CuTest -- CuTest(Cute Test)是一个很easy的C语言单元測试工具.在使用它的时候,仅仅须要包括两个文件“CuTest.c CuTest.h”,然后就能够写測试用例,进行測试了.它对用例差点儿没有管理功能,报表输出也很easy,能够用来试验单元測试的基本想法. CUnit -

有了測试工具,傻瓜仍是傻瓜

Kaspar van Dam自2005年以来一直在測试领域活跃着,且自2009年起就专攻測试自己主动化和性能測试. 他在很多公司当过測试工具project师和測试顾问.他的经验覆盖了測试自己主动化和性能測试的技术实施以及该工作领域的不同管理与协作任务.在他的公司(荷兰Ordina公司)里,Kaspar是測试自己主动化的思想领袖之中的一个,负责一部分公司愿景发展和建议.他还负责一些关于測试自己主动化和性能測试的业务课程. ? 測试工具:人们总是觉得測试工具是每一个測试难题的解决方式.有了工具实施,