2015-05-27 90 views
1

我正在製作一款opengl-es應用程序,並且我一直通過傳遞每個四個頂點的6個索引來繪製四邊形,從而將一個四邊形分成兩個三角形。我認爲你可以在三維圖形中製作四邊形和三角形..?我注意到在攪拌器中,但是如果使用decimate修改器,則可以使用十幾個或更多個垂直進行修改。 opengl-es可以渲染這個嗎?你如何渲染由十幾個vert構成的臉部?我不確定它是如何從一個opengl的角度來看。 opengl是否知道每次獲得3個頂點索引時都會繪製?如果這樣會很方便。Opengl三角形和麪臨頂點限制?

回答

0

OpenGL ES以及桌面OpenGL的核心配置文件只支持三角形組成的原始類型。早期版本的OpenGL支持其他基本類型,如GL_QUADSGL_POLYGON,但它們並未被最近的硬件直接支持,並且大多數情況下都是冗餘的。

除了單獨的三角形(GL_TRIANGLES原始類型)之外,還支持三角形條(GL_TRIANGLE_STRIP)和三角形風扇(GL_TRIANGLE_FAN)。它們允許您繪製連接三角形的集合,而不必爲每個三角形指定3個頂點。

下圖(從Red Book借)示出了三角形如何從指定的頂點形成有用於每個原語類型:

primitive types

例如,在當前使用6個頂點索引爲一個四邊形,您只能使用4個三角形網格或三角形風扇。有些人聲稱,只要你分享頂點,減少指數的數量通常不會幫助表現。

如果您的輸入格式使用具有任意數量頂點的多邊形,只要多邊形是凸面的,這仍然很容易處理。如果您查看上圖中的三角形扇形,您會注意到頂點排序實際上與多邊形的排列順序相同。所以凸多邊形可以直接用三角形風扇表示。

如果您寧願堅持使用GL_TRIANGLES進行渲染,並且輸入具有n邊多邊形,則必須將它們拆分爲三角形。再說一次,只要多邊形是凸的就很容易。除了分別爲每個三角形生成索引之外,您可以使用與三角形風扇相同類型的三角測量。我的答案在這裏詳細闡述了一些:Converting quadriladerals in an OBJ file into triangles?

非凸多邊形是另一回事。您將不得不使用從簡單到複雜的算法將它們分成三角形。如果您使用像「多邊形三角測量算法」這樣的搜索術語,您應該能夠找到大量的文獻。也可以在OpenGL中巧妙地使用模板緩衝區來繪製凹多邊形。但我懷疑大多數建模程序會生成凹多邊形,所以這是一個非常罕見的用例。