• <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>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            OpenCASCADE Incremental Mesh

            Posted on 2018-12-31 22:45 eryar 閱讀(4466) 評論(2)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCASCADE Incremental Mesh

            eryar@163.com

             

            Abstract. OpenCASCADE IncrementalMesh is used to build the mesh of a shape with respect of their correctly triangulated parts. The blog focus on the deflection control of the algorithm.

             

            Key Words. Mesh, Visualization

             

            1. Introduction

            Mesh是生成三維模型顯示數據的關鍵算法。OpenCASCADETKMesh提供了網格剖分算法,用于生成BREP體的顯示數據。原來的一些文章對網格剖分的算法及其用法進行過說明,本文主要對網格剖分的核心部分進行深入挖掘,理解其剖分精度控制原理。感興趣的讀者可以結合源碼,學習其實現方法。當理解其算法原理后,也可以自己實現一套結合實際需求的高性能網格剖分庫。

            網格剖分的主要流程如下:

             

            遍歷TopoDS_ShapeTopoDS_Face,對于每個TopoDS_Face,遍歷其TopoDS_Wire,對于每個TopoDS_Wire遍歷其TopoDS_Edge,在根據EdgeFace得到PCurve。因為TopoDS_Wire是閉合的,所以WirePCurve是在參數空間閉合區域。對PCurve圍成的參數區域進行三角剖分,將三角剖分的結果映射到三維空間,最終生成每個Face的網格剖分。這個流程很好理解,但是如何對網格剖分的質量進行控制呢?即用相對少的三角網格來更好地表示三維模型呢?

             

            2. Mesh Deflection Control

            OpenCASCADEBRep體進行三角剖分網格化的類是BRepMesh_IncrementalMesh,此類有兩個主要的選項來控制三角網格化:線性偏差Linear deflection和角度偏差Angular deflection

            三角網格剖分第一步是將所有的邊Edge進行離散,即根據一定的精度生成多段線;

             

            線性偏差限制離散的多段線與曲線之間的距離;角度偏差限制每段線段端部切線的夾角。

            第二步是對面進行三角剖分。線性偏差也限制離散的三角形中點到曲線的距離。

             

            應用程序應該提供適當的偏差參數以達到生成滿意的三角網格。角度偏差Angular deflection比較簡單且允許使用一個默認值(12~20度)。線性偏差Linear deflection有絕對的含義,需要由程序來給定正確的值。給一個很小的線性偏差值會導致網格剖分過密,消耗大量內存及影響顯示效率;但是值太大得到的網格效果就是顯示失真。所以對于LOD的網格來說,需要根據模型尺寸來設置相應的線性偏差值。

            上面對網格剖分的參數設置進行了介紹,下面對網格剖分的實現原理進行說明。因為曲線曲面是三維的,而對曲面進行剖分的底層三角剖功能是個二維三角剖分庫,所以網格剖分總的思路是對曲線在二維參數空間進行剖分,將參數空間剖分的結果通過曲面參數方程映射回到三維空間。通過對pcurve圍成的參數空間閉合區域進行二維三角剖分,即可對三維曲面進行剖分。類BRepMesh_FastDiscretFace是對每個TopoDS_Face進行離散,其中函數control()是用來控制生成網格的質量的。

             

            最多迭代次數是11次。在每一次迭代過程中,檢查生成的所有三角形在參數空間中心點處與曲面的距離是否滿足線性偏差,如果不滿足,則插入新的點以便下次迭代。

             

            從上面的代碼可以看出其實現思路與其類名Incremental還是很貼切的,即增量法。

             

             

            3. Conclusion

            OpenCASCADE的網格剖分中網格質量控制是相對重要的核心功能。在理解其原理后,可以自己實現一個更清晰的網格剖分庫。

             

            2018年就過結束了,這一年收獲頗豐,其中最大的收獲就是有了自己的小寶寶。

             

            分享創建價值。雖然OpenCASCADE不是完美的,但是她是目前世界上唯一一款功能相對完善的開放的幾何造型庫。OpenCASCADE的開放分享,給她帶來生機。當他人因為我的blog的分享的文章或代碼聯系我時,他們的一聲感謝,我都會覺得很高興。

             

            2019年馬上就要到來,希望大家在新的一年里,創造、創新,突破自我,更上一層樓!


            為了方便大家在移動端也能看到我的博文和討論交流,現已注冊微信公眾號,歡迎大家掃描下方二維碼關注。
            Shing Liu(eryar@163.com)

            Feedback

            # re: OpenCASCADE Incremental Mesh  回復  更多評論   

            2020-05-14 11:00 by 七星重劍
            OpenCASCADE 看起來很不錯。恭喜有了小寶寶:)

            # re: OpenCASCADE Incremental Mesh  回復  更多評論   

            2020-05-15 11:06 by eryar
            @七星重劍
            OpenCASCADE感覺是目前世界上開源的唯一一款造型功能相對完善的內核庫。
            感謝。
            日韩欧美亚洲综合久久影院Ds | 色综合久久久久无码专区 | 久久国产午夜精品一区二区三区| 国产欧美一区二区久久| 精品无码久久久久久久动漫| 天天影视色香欲综合久久| 久久精品中文騷妇女内射| 色综合久久久久| 久久天天躁狠狠躁夜夜躁2014| 国产91色综合久久免费| 久久亚洲中文字幕精品一区| 香蕉久久av一区二区三区| 久久93精品国产91久久综合| 精品无码久久久久久尤物| 综合久久一区二区三区| 精品国产婷婷久久久| 精品国产福利久久久| 久久精品成人欧美大片| 久久精品国产只有精品66| 久久久久久久99精品免费观看| 久久精品桃花综合| 久久精品女人天堂AV麻| 99久久超碰中文字幕伊人| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 热99RE久久精品这里都是精品免费| 91久久精品91久久性色| 少妇精品久久久一区二区三区| 亚洲欧美一级久久精品| 久久天天躁狠狠躁夜夜不卡| 久久免费精品一区二区| 国产AⅤ精品一区二区三区久久| 久久综合久久综合亚洲| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久精品国产色蜜蜜麻豆| 国色天香久久久久久久小说| 精品一久久香蕉国产线看播放| 久久久婷婷五月亚洲97号色| 日产精品久久久久久久| 色播久久人人爽人人爽人人片aV| 99国产欧美久久久精品蜜芽| 国内精品九九久久精品|