2011-06-30 113 views
3

因此,從目前的情況來看,我認爲GLSL幾何着色器在投影/模型視圖矩陣轉換輸入頂點後工作。換句話說,幾何着色器在剪輯座標上處理事物。GLSL幾何着色器和投影矩陣

如果我使用幾何着色器將GL_POINTS轉換成由GL_TRIANGLES製成的立方體,那怎麼辦?當計算剪輯座標上的東西時,生成的形狀似乎總是面對你/忽略旋轉/縮放等。

而且,GL_TRIANGLES似乎不支持作爲可能的幾何輸出類型之一。但我試過了,而且它似乎工作。我想這是視頻卡的依賴?如果不支持GL_TRIANGLES,是否可以製作立方體?在空間之間製作零寬度的三角形條紋可能是?

回答

4

您正在使用着色器:幾何着色器對頂點着色器傳遞給它們的任何東西都起作用。如果您希望它是剪輯空間值,那麼幾何着色器將對剪輯空間值起作用。如果頂點着色器傳遞了它們的眼睛空間值,那麼幾何着色器必須處理眼睛空間值。

重要的是最終的預柵格化着色器階段輸出到gl_Position是什麼需要在同質剪輯空間。頂點着色器在其後面具有幾何着色器,甚至不需要寫入gl_Position

此外,似乎GL_TRIANGLES不支持作爲可能的幾何輸出類型之一。

您必須使用ARB_geometry_shader4,而不是實際的核心幾何着色器功能。如果可以的話,你可能應該避免使用擴展名。任何具有幾何着色器的硬件都可以運行OpenGL 3.2。

在任何情況下,核心功能都不支持三角形作爲輸出。它支持點,線條和三角形條。

如果不支持GL_TRIANGLES,可以製作多維數據集嗎?

這就是EndPrimitive()的用途。你在完成一個基元時調用它;沒有什麼能阻止你發射第二個原語。或第三。

此外,你應該被告知,這可能會很慢。幾何着色器不能用於快速渲染性能。

+0

謝謝。經過初步測試,它似乎比我舊的glBegin/glEnd方法繪製立方體的速度快..畢竟..我想我應該嘗試對比純VBO與做這個。此外,你作爲鵬洛客過度:) – kamziro