簡體   English   中英

使用Triangle庫對凹面進行三角剖分

[英]Triangulation of concave polygon using Triangle library

我使用的是Triangle庫的C ++包裝器,無法擺脫多邊形之外的三角形。

這是我想要得到的:

目標

這是我對Triangle的了解:

用Triangle三角剖分后的多邊形

(我故意不填充三角形以顯示多邊形之外有一些三角形)

我嘗試使用射線投射算法消除外部三角形(查找三角形邊緣的中心並查看其是否在多邊形中。如果至少一個不存在,則不要繪制該三角形),但是對於我而言,它的速度非常慢(多邊形每幀更新一次)。 我錯過了什么? 我應該將哪些參數傳遞給Triangle以對凹面進行三角剖分?

如果無法用Triangle做我想做的事,有人可以建議我一種繪制多邊形的快速方法(我的程序使用Qt Quick Scene Graph,並且我只能按照OpenGL的要求僅在三角形或凸多邊形中繪制)? 目前,我想嘗試使用GLU的細分方法並使用模板緩沖區進行繪制。 我也打算嘗試這個圖書館

至少有兩種繪制普通凹面的方法:

  1. 應用三角剖分算法。 這就是您一直在嘗試的方法。 關於該主題的文獻應該很多,也許您可​​以使用源代碼。

  2. 使用模板緩沖區。 我對這些較早出現的問題的回答就說明了這一點: 塗黑多邊形 外的所有內容如何強制openGL繪制非凸填充多邊形

但是,如果只需要繪制示例中使用的半月型形狀,而不是任意的凹多邊形,則這似乎比所需的復雜得多。 您可以輕松地構建一個三角形條來表示此形狀。

您當前的半月可能是用看起來像這樣的頂點序列渲染的,該頂點序列按(凹形)多邊形所需的順序定義了頂點:

0                                              9
  17                                        10
  1   16                                11   8
            15                    12
      2             14    13             7

            3                      6
                    4      5

您可以通過對頂點進行不同的排序來直接使用基本類型GL_TRIANGLE_STRIP渲染此形狀,以使底部弧的頂點與頂部弧的頂點交替:

0                                             17
   2                                        16
  1    4                                14   15
             6                    12
      3              8    10             13

            5                      11
                    7      9

GLU鑲嵌消除了該問題。 它顯示出高性能和良好的三角剖分質量,並且可以在我的筆記本電腦和Android平板電腦Nexus 7上正常運行。您可以在此處找到自包含的GLU libtess版本。

您可以通過命中測試來嘗試隱藏的位圖,但是它僅在輸出中起作用。 我這樣做是為了繪制等高線圖: https : //cntm.codeplex.com/ 或者,您可以嘗試使用Alpha形狀。 定義為去除超過alpha的邊緣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM