2015-05-14 64 views
2

在我的引擎中,我想避免使用線條和單獨的三角形類型。我想用兩個相同的三角形繪製線條。但在opengl中,這個三角形不會被顯示,因爲它具有零區域,因此不能覆蓋像素。OpenGL:使用退化三角形的繪製線

在內部,在驅動程序級別,使用退化三角形繪製一條opengl線條,並使用不同的光柵化規則,其中每條掃描線至少繪製一個像素。

D3d有一些選項,您可以將光柵化設置爲始終繪製每個掃描行的第一個像素 - 有效地完成我在d3d中所需的操作。

但我怎樣才能做到這一點與opengl?我看不到任何允許您更改光柵化規則的命令。

+0

也許glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 但是如果你不得不改變線條和多邊形的opengl狀態,那麼不使用GL_LINES的優勢在哪裏? – Arne

+0

你在說什麼D3d選項? – Jerem

+1

我認爲我沒有聽說過D3D標誌......通常退化三角形在GL和D3D的頂點設置階段都被拒絕(例如,即使頂點着色器沒有被執行,更不用說像素了/片段着色器)。如果您渲染三角形條帶,禁用退化拒絕會很奇怪,因爲對於任何通用模型數據,通常會有大量的退化。你會得到......線路到處都是,我不知道爲什麼這是可取的? – MuertoExcobito

回答

2

那麼我做了這個確切的事情,必要的三個頂點,使用前兩個作爲行的起點,然後在行渲染對象的開始使用glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)結束。

將此功能與適當的啓用和禁用臉部剔除功能結合在一起,並且您已經擁有了一個完美的線條渲染器,它仍然使用設置的三角形。

+0

這不是我所希望的,但我能夠使用它。我有1個頂點緩衝區需要保存兩條線和三角形。我將線添加爲退化三角形,然後在渲染時,我使用GL_FILL渲染一次VB,然後使用GL_LINES再次渲染VB。 –