青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

Bounding Volume Hierarchy BVH in OpenCASCADE

Posted on 2017-05-03 22:50 eryar 閱讀(6497) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

Bounding Volume Hierarchy BVH in OpenCASCADE

eryar@163.com

Abstract. Bounding Volume Hierarchy(BVH) organizes geometric objects in the tree based on spatial relationships. Each node in the tree contains an axis-aligned bounding box of all the objects below it. Bounding volume hierarchies are used in many algorithms to support efficient operations on the sets of geometric objects, such as collision detection, ray-tracing, searching of nearest objects, and view frustum culling. The paper focus on the usage of BVH on TopoDS_Shape, and its application.

Key Words. BVH, Bounding Volume Hierarchy, Collision Detection

1.Introduction

層次包圍盒(Bounding Volume Hierarchy, BVH)是一種基于物體的場景管理技術(shù),廣泛用于碰撞檢測,光線追蹤,視錐體物體剔除等場合。對于三維場景的實時渲染來說,BVH是最常用的數(shù)據(jù)結(jié)構(gòu)。場景以層次樹形結(jié)構(gòu)進(jìn)行組織,包含一個根節(jié)點、內(nèi)部節(jié)點、葉子節(jié)點。樹中的每個節(jié)點,包括葉子節(jié)點都有一個包圍體,可以將其子樹的所有幾何體包圍起來,這就是BVH名字的由來。如下圖所示:

wps9752.tmp

Figure 1. Simple Scene(left), BVH Scene Graph(right)

本文主要介紹OpenCASCADE中的BVH包及其應(yīng)用,如碰撞檢測。

2.Build BVH

在BVH包中的頭文件里面找到BVH的作者:Denis BOGOLEPOV, Danila ULYANOV,在網(wǎng)上搜到他們的一篇論文:Real-Time SAH BVH Construction for Ray Tracing Dynamic Scenes. 因此,可知BVH中是應(yīng)用SAH(Surface Area Heuristic)策略來構(gòu)造BVH樹的。根據(jù)BVH_BinnedBuilder頭文件中的注釋可知:

//! Performs construction of BVH tree using binned SAH algorithm. Number
//! of bins controls BVH quality in cost of construction time (greater
//! better). For optimal results, use 32 - 48 bins. However, reasonable
//! performance is provided even for 4 - 8 bins (it is only 10-20% lower
//! in comparison with optimal settings). Note that multiple threads can
//! be used only with thread safe BVH primitive sets.

OpenCASCADE中也提供了其他的構(gòu)造方法,如類BVH_LinearBuilder中使用了Spatial Morton codes方法:

//! Performs fast BVH construction using LBVH building approach.
//! Algorithm uses spatial Morton codes to reduce the BVH construction
//! problem to a sorting problem (radix sort -- O(N) complexity). This
//! Linear Bounding Volume Hierarchy (LBVH) builder produces BVH trees
//! of lower quality compared to SAH-based BVH builders but it is over
//! an order of magnitude faster (up to 3M triangles per second).
//!
//! For more details see:
//! C. Lauterbach, M. Garland, S. Sengupta, D. Luebke, and D. Manocha.
//! Fast BVH construction on GPUs. Eurographics, 2009.

3.Traversal BVH

由類BVH_TreeBase可知,當(dāng)?shù)玫紹VH樹后,可以取出節(jié)點索引的數(shù)組。下面給出將TopoDS_Shape的BVH樹顯示出來的示例代碼:

/*
Copyright(C) 2017 Shing Liu(eryar@163.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

// Visual Studio 2013 & OpenCASCADE7.1.0
// 2017-04-18  20:52 

#include <BRepExtrema_TriangleSet.hxx>

#include <BRepTools.hxx>
#include <BRep_Builder.hxx>

#include <TopoDS.hxx>

#include <TopExp_Explorer.hxx>

#include <BRepPrimAPI_MakeBox.hxx>

#include <BRepMesh_IncrementalMesh.hxx>

#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")

#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")
#pragma comment(lib, "TKGeomAlgo.lib")

#pragma comment(lib, "TKBRep.lib")
#pragma comment(lib, "TKPrim.lib")
#pragma comment(lib, "TKMesh.lib")
#pragma comment(lib, "TKTopAlgo.lib")


void testBvh(const std::string& theFileName)
{
    BRep_Builder aBuilder;
    TopoDS_Compound aCompound;

    TopoDS_Shape aShape;
    BRepTools::Read(aShape, theFileName.c_str(), aBuilder);

    BRepExtrema_ShapeList aFaceList;
    for (TopExp_Explorer i(aShape, TopAbs_FACE); i.More(); i.Next())
    {
        aFaceList.Append(TopoDS::Face(i.Current()));
    }

    aBuilder.MakeCompound(aCompound);

    BRepMesh_IncrementalMesh aMesher(aShape, 1.0);

    BRepExtrema_TriangleSet aTriangleSet(aFaceList);
    const NCollection_Handle<BVH_Tree<Standard_Real, 3> >& aBvh = aTriangleSet.BVH();
    for (int i = 0; i < aBvh->Length(); i++)
    {
        const BVH_Vec4i& aNodeData = aBvh->NodeInfoBuffer()[i];

        if (aNodeData.x() == 0)
        {
            // inner node.
            const BVH_Vec3d& aP1 = aBvh->MinPoint(aNodeData.y());
            const BVH_Vec3d& aP2 = aBvh->MaxPoint(aNodeData.y());

            const BVH_Vec3d& aQ1 = aBvh->MinPoint(aNodeData.z());
            const BVH_Vec3d& aQ2 = aBvh->MaxPoint(aNodeData.z());

            try
            {
                BRepPrimAPI_MakeBox aBoxMaker(gp_Pnt(aP1.x(), aP1.y(), aP1.z()),
                    gp_Pnt(aP2.x(), aP2.y(), aP2.z()));
                for (TopExp_Explorer i(aBoxMaker.Shape(), TopAbs_EDGE); i.More(); i.Next())
                {
                    aBuilder.Add(aCompound, i.Current());
                }
            }
            catch (Standard_Failure f)
            {
            }

            try
            {
                BRepPrimAPI_MakeBox aBoxMaker(gp_Pnt(aQ1.x(), aQ1.y(), aQ1.z()),
                    gp_Pnt(aQ2.x(), aQ2.y(), aQ2.z()));
                for (TopExp_Explorer i(aBoxMaker.Shape(), TopAbs_EDGE); i.More(); i.Next())
                {
                    aBuilder.Add(aCompound, i.Current());
                }
            }
            catch (Standard_Failure f)
            {
            }
        }
        else
        {
            // leaves node.
            const BVH_Vec3d& aP1 = aBvh->MinPoint(i);
            const BVH_Vec3d& aP2 = aBvh->MaxPoint(i);

            try
            {
                BRepPrimAPI_MakeBox aBoxMaker(gp_Pnt(aP1.x(), aP1.y(), aP1.z()),
                    gp_Pnt(aP2.x(), aP2.y(), aP2.z()));

                aBuilder.Add(aCompound, aBoxMaker.Shape());
            }
            catch (Standard_Failure f)
            {
            }
        }
    }

    BRepTools::Write(aCompound, "d:/bvh.brep");
}

int main(int argc, char* argv[])
{
    if (argc > 1)
    {
        testBvh(argv[1]);
    }

    return 0;
}

由上述代碼可知,當(dāng)?shù)玫焦?jié)點信息

const BVH_Vec4i& aNodeData = aBvh->NodeInfoBuffer()[i];

后,通過判斷aNodeData.x()分量來確定此節(jié)點是內(nèi)部節(jié)點還是葉子節(jié)點。顯示OCC自帶的螺旋槳模型的BVH如下圖所示:

wps9772.tmp

wps9773.tmp

其中紅色線框為內(nèi)部節(jié)點,黃色實體模型是葉子節(jié)點。

wps9774.tmp

wps9775.tmp

4.BVH Application

BVH在OpenCASCADE中也有廣泛地應(yīng)用,如開源版本中的模型快速碰撞檢測,使用類BRepExtrema_ShapeProximity. 模型選擇操作,光線跟蹤等算法中都有應(yīng)用。

5.Conclusion

因為OpenCASCADE中構(gòu)造BVH時依賴模型的網(wǎng)格三角形,所以BVH算法的應(yīng)用的結(jié)果就依賴于網(wǎng)格化算法的質(zhì)量了。如兩個Topo形狀碰撞檢測時,網(wǎng)格化的質(zhì)量越高,結(jié)果精度越高。如果用解析算法去對兩個Topo形狀做碰撞檢測,也會涉及到解析算法的精度問題。

BVH結(jié)構(gòu)廣泛應(yīng)用于碰撞檢測、光線跟蹤等算法中,大大提高程序性能。本文只是拋磚引玉,對BVH感興趣的童鞋可以參考相關(guān)資料及OpenCASCADE中的代碼實現(xiàn),去深入學(xué)習(xí)應(yīng)用。

6.References

1. Dmitry Sopin, Denis Bogolepov, Danila Ulyanov. Real-Time SAH BVH Construction for Ray Tracing Dynamic Scenes. http://graphicon.ru/html/2011/conference/gc2011Sopin.pdf

2. BVH with SAH. http://www.cnblogs.com/lookof/p/3546320.html

3. 3D游戲引擎中常見的三維場景管理方法. http://www.cnblogs.com/wangchengfeng/p/3495954.html

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲丁香婷深爱综合| 欧美日韩在线另类| 国产欧美婷婷中文| 午夜精品久久久久久久白皮肤| 亚洲国产精品精华液网站| 久久最新视频| 91久久久久久| 亚洲国产精品女人久久久| 欧美大片国产精品| 9色精品在线| 亚洲午夜激情网页| 国产日韩在线视频| 久久综合五月| 久久中文久久字幕| 99av国产精品欲麻豆| 亚洲精品资源| 国产精品乱码一区二三区小蝌蚪| 欧美一级大片在线观看| 欧美专区第一页| **性色生活片久久毛片| 最新国产成人在线观看| 欧美午夜不卡视频| 久久9热精品视频| 久久国产色av| 亚洲最新视频在线| 午夜精品影院在线观看| 在线看视频不卡| 亚洲激情六月丁香| 国产欧美一区二区精品秋霞影院| 美女爽到呻吟久久久久| 欧美日韩黄色一区二区| 久久精品日产第一区二区三区 | 亚洲人成欧美中文字幕| 亚洲免费观看| 韩国av一区二区三区| 最新日韩在线| 国产日韩在线一区| 欧美激情一区二区三区高清视频| 国产精品九色蝌蚪自拍| 欧美黑人一区二区三区| 欧美视频二区36p| 快射av在线播放一区| 欧美午夜电影网| 男男成人高潮片免费网站| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 一区二区av在线| 在线观看欧美日韩国产| 亚洲一区二区三区四区在线观看| 黑丝一区二区| 亚洲自拍电影| 一本大道久久a久久精品综合| 久久久久.com| 欧美呦呦网站| 欧美性猛交视频| 91久久久在线| 亚洲国产天堂久久综合| 欧美一区二区三区日韩视频| 亚洲最快最全在线视频| 免费欧美电影| 免费成人av| 韩日精品中文字幕| 亚洲欧美在线磁力| 欧美亚洲视频一区二区| 欧美色另类天堂2015| 亚洲精品在线电影| 亚洲精品国产系列| 久热精品视频| 另类图片综合电影| 尤物yw午夜国产精品视频明星 | 久久久国产精彩视频美女艺术照福利| 欧美日韩喷水| 亚洲乱码国产乱码精品精天堂| 1024国产精品| 免费日本视频一区| 亚洲国产裸拍裸体视频在线观看乱了中文| 一区二区视频免费在线观看| 亚洲欧美日韩电影| 久久精品视频免费| 国内精品久久久久影院 日本资源| 亚洲免费影视| 久久精品99久久香蕉国产色戒| 国产精品亚洲美女av网站| 亚洲精品欧美极品| 99re成人精品视频| 国产精品theporn88| 亚洲无亚洲人成网站77777| 亚洲欧美日韩国产综合| 国产视频一区欧美| 久久亚洲一区| 亚洲高清视频一区| 在线一区欧美| 国产精品日韩一区二区三区| 亚洲欧美日韩在线播放| 久久av资源网| 激情综合电影网| 免费中文日韩| 夜色激情一区二区| 久久精品中文字幕一区| 亚洲国产精品久久人人爱蜜臀| 欧美好吊妞视频| 一本色道婷婷久久欧美| 久久精品国产清高在天天线| 亚洲高清在线| 欧美视频在线不卡| 久久久久88色偷偷免费| 亚洲人成人一区二区在线观看| 亚洲欧美日韩国产精品| 在线播放豆国产99亚洲| 欧美日韩精品免费| 久久精品人人爽| 亚洲欧洲精品一区二区三区 | 在线观看视频免费一区二区三区 | 一本久久a久久精品亚洲| 久久精品网址| 一本色道久久99精品综合| 国模套图日韩精品一区二区| 欧美护士18xxxxhd| 欧美在线亚洲在线| 在线亚洲观看| 欧美/亚洲一区| 亚洲欧美日本伦理| 日韩午夜高潮| 精品av久久久久电影| 国产精品久久久久影院色老大 | 亚洲无线观看| 欧美大片免费看| 欧美一级专区免费大片| 日韩亚洲欧美综合| 黑丝一区二区三区| 国产精品亚洲综合色区韩国| 欧美激情久久久久| 久久久www免费人成黑人精品 | 欧美激情久久久| 欧美在线免费看| 亚洲视频久久| 99精品久久| 亚洲欧洲美洲综合色网| 精品成人一区二区三区| 国产亚洲免费的视频看| 欧美视频一区在线| 欧美日韩一卡| 欧美精品激情在线观看| 欧美不卡视频| 免费观看国产成人| 另类酷文…触手系列精品集v1小说| 午夜精品久久久99热福利| 亚洲视频免费观看| 一区二区三区精品久久久| 9l国产精品久久久久麻豆| 亚洲欧洲免费视频| 亚洲国产毛片完整版| 亚洲高清视频一区| 亚洲国产精品成人精品| 欧美国产日韩二区| 亚洲国产欧美另类丝袜| 亚洲高清色综合| 亚洲精品免费在线观看| 日韩午夜在线电影| 在线亚洲欧美视频| 亚洲自拍偷拍网址| 午夜精品一区二区三区四区| 亚洲欧美一区二区精品久久久| 亚洲欧美国产精品桃花| 篠田优中文在线播放第一区| 欧美在线视频不卡| 久久全国免费视频| 欧美黄色影院| 国产精品成人aaaaa网站| 国产精品一区免费在线观看| 国产欧美一区二区色老头| 狠久久av成人天堂| 亚洲人成小说网站色在线| 在线亚洲欧美| 欧美影院成年免费版| 麻豆成人av| 最新日韩在线| 亚洲一区精品视频| 久久久久久久欧美精品| 欧美激情综合五月色丁香| 欧美午夜无遮挡| 国模私拍视频一区| 野花国产精品入口| 久久精品亚洲| 亚洲国产精品第一区二区三区| 中文一区二区| 久久久久**毛片大全| 欧美日韩在线影院| 精品成人一区| 亚洲图片自拍偷拍| 蜜乳av另类精品一区二区| 亚洲免费高清视频| 久久午夜视频| 国产精品日韩久久久久| 亚洲激情第一页| 欧美亚洲专区| 亚洲精品国产无天堂网2021| 久久国产福利| 国产精品久久久久毛片大屁完整版| 亚洲高清网站| 久久九九免费视频|