2012-09-19 52 views
4

爲了說明這個問題,我對OpenGL及其背後的數學有了很好的理解,雖然我從來沒有碰過任何與DirectX相關的東西,但我想象的概念是相似的。三角形是gpu限制還是其他渲染路徑?

有很多關於爲什麼三角形用於3D圖形的信息(它們必須是平面的,除了更小的三角形等是不可分的)。但是,我想知道三角形是否僅僅是存儲和操作3D數據的簡便方式(關於插值的簡單數學等),或者如果圖形卡中存在硬件限制,只能逼真地渲染三角形(例如基本上只能應用於三角形的說明)。

繼此之後,有沒有什麼辦法可以實現圖形渲染的逐像素控制(如this question的答案簡要概述)。雖然我欣賞通過驅動程序完成對單個像素的直接控制,但有什麼辦法可以在渲染環境中獲得這種控制嗎?有沒有完全避免「三角形」?

回答

14

是的,沒有。有點。

當前的GPU被設計用於渲染三角形,因爲三角形很適合使用。而,因爲當前的GPU被設計爲與三角形一起工作,人們使用三角形,所以GPU只需要處理三角形,因此它們被設計爲僅處理三角形。

正如你所說,三角形具有使它們方便使用的優點。 GPU 可以製作(並且已經制作了)以便本地呈現其他原語,但它不是真的值得。如果您告訴現代GPU呈現四邊形,它會將其分成兩個三角形並呈現這些三角形。

不是因爲GPU技術原因本身不能渲染四方陣,而是因爲不值得在上花費晶體管。將GPU專注於盡可能快地完成三角形,然後在需要的時候模仿其他基元更有用。

所以,現代GPU有硬件限制,所以他們不能使用四邊形,但不是因爲設計一個可以與四邊形一起工作的GPU是不可能的。這樣做效率不高。 :)

至於「避免三角形」,當然,這基本上是片段着色器的作用:它填充一個像素。 GPU只是平行運行數百萬次以填充整個屏幕。你可以繪製兩個大三角形,它們組成一個填滿整個屏幕的四邊形,然後只需指定一個片段着色器,用它來填充你喜歡的內容。

如果您想對流程有更多的控制,請用軟件代替:將一個像素一次繪製到內存表面,然後將其作爲紋理加載到GPU上。但速度很慢。 :)

-2

據我所知,每個現代CAN渲染四邊形和一些甚至N-gons,但它比較四個渲染時間與2個三角形顯示三角形優勢。 這主要是因爲GPU已經過渲染三角形的優化,而硬件硬件有更多的「蒸汽處理器」(對於三角形),然後是其他的如紋理。 GPU上的某些其他處理器類型可以直接渲染四邊形,但通常情況下,您會發現一千個蒸汽到幾個紋理處理器。請注意,獲取渲染單元渲染四邊形極其困難。理論上是可能的,但沒有人使用pricip作爲一個緊急情況。

除非你非常接近硬件操作的工作軟件會照顧三角形的,(例如,從四邊自動將它們轉換)

+0

GPU的不「渲染四邊形」。他們將一個四邊形轉換爲兩個三角形,這就是爲什麼它慢得多。 – Krythic