2013-05-29 68 views
1

考慮從這個的OpenGL ES爲iOS簿下面引用確定像素紋理數:在片段

的OpenGL ES支持幾種不同的採樣模式:考慮當較少的片段爲一個三角形比紋理像素的數目產生會發生什麼在綁定的紋理中可用。只要具有大量紋理元素的紋理映射到只覆蓋幀緩衝區中幾個像素的三角形,就會發生這種情況。相反的情況也可能發生。包含少量紋理元素的紋理可能映射到在幀緩衝區中產生許多片段的三角形。

而這個報價:

指定參數GL_TEXTURE_MIN_FILTER [glTexParameteri]與值GL_LINEAR告訴OpenGLES,每當有多個紋理像素對應於一個片段,樣品的顏色從幾個合適的紋理像素的和使用線性插值混合顏色以產生紋理對片段的貢獻。產生的片段顏色可能最終成爲紋理中不存在的顏色。例如,如果紋理由交替的黑色和白色紋理元素組成,則線性採樣將混合紋理元素顏色,並且片段最終變爲灰色。

我的問題是如何確定圖像中有多少個紋​​理元素以及這些紋理元素有多大。如果我沒有錯誤1 texel!= 1像素,那麼您無法通過計算像素來確定像素的數量。例如,第二個引用描述了具有交替黑白紋理像素的圖像。你怎麼知道你的圖像是由黑白紋理元素組成的......誰定義了紋理元素的大小?誰說一個texel沒有黑色白色。考慮到紋理像素沒有設置大小,邊界等,我怎樣才能確定給定圖像中的一個紋理像素是什麼樣子的。

回答

0

當紋理大於或小於您要繪製的表面時,可能會構成紋理從圖像上的許多像素。即使圖像旋轉或翻譯,也可能發生相同的情況。在空閒情況下,當將紋理/圖像繪製到幀緩衝區時,片段將請求圖像上的特定像素並呈現它,但是在大多數情況下,存在片段請求位於像素之間的位置處的像素(放大倍數)到紋理上的一組像素(縮小)。在任何情況下,您都需要使用以太內插來獲取顏色值GL_LINEAR或取最接近的像素GL_NEAREST,而openGL可以很好地完成此操作。因此,「你如何確定圖像中有多少紋理元素,以及這些紋理元素有多大」這個問題無法回答,因爲你所要求的情況取決於你將如何繪製它。

「你怎麼知道你的圖像是由黑色和白色的紋理元素組成的?」它看起來不是一種選擇,還是我不明白這個問題?你發佈的報價提出了一個假想的情況,有黑白圖像:可以說它是2x2,2黑色(.0)和2白色(1.0)像素,如果你用GL_LINEAR將它繪製到緩衝區1x1,你會得到一個像素灰色(.5),因此幀緩衝區中的像素包含原始圖像中不存在的顏色。

「誰定義了紋理元素的大小」我不太確定是否要說紋理元素的大小,但可以將其轉換爲「誰定義了將使用多少紋理像素來組成幀緩衝區像素」,那麼openGL應該是因爲它是建立在如何處理這種情況的基礎上的。 「這是誰的說一個texel沒有黑色和白色在它」這實際上是矩陣設置,圖像本身,開發人員的組合...您可以放置​​GL_NEAREST,並且在任何其他情況下,您可以嘗試計算結果或製作黑白圖像並查看輸出結果,它將始終爲醚或不是兩者。

「考慮到texels沒有設置大小,邊界等,我怎麼才能確定給定圖像中的一個紋理像素是什麼樣的。」你可以從紋理尺寸和表面繪製的比例中獲得一個基本想法;來自輸出;逐步瞭解openGL的功能並嘗試對其進行計算。

總而言之,如果所有這些都在後臺工作,就像知道這些事情確實發生一樣,這並不重要。爲什麼你應該知道它是嘗試繪製一些明確的文本,並在某個方向翻譯它的一半像素,結果將是文本的模糊(一個非常常見的問題),因爲幀緩衝區像素將「混合」的顏色在字母邊界上。另一個問題可能是結果不是完全意味着顏色,而是一些後處理的值,例如某些表格查找值,正常變形,座標變形......在這些情況下,您可能會得到完全沒有意義的值。

+0

我的意思是黑+白紋理圖像是這樣的:如果1紋素!= 1像素和紋素沒有定義邊界,誰知道一個紋素結束而另一個開始?以你描述的2X2圖像爲例,我知道會有2個黑色像素和2個白色像素..所以有多少個像素?如果一個texel!=一個像素,我將如何確定紋素的數量?可能有兩個紋理元素,每個紋理元素包含相同的顏色,或者可能有4個元素包含它們自己的像素。 - 真的任何組合我是完全錯誤的像素如何對應像素謝謝:) – foobar5512

+0

此外,texels必須由相同的彩色像素組成,例如一個紋理像素可以包含1個白色像素和1個黑色像素? – foobar5512

+0

您可以說要繪製的紋理元素的數量與片段數(或輸出像素數)相同。幀緩衝區的片段將從紋理中調用紋理元素,所以您不能談論只有紋理或只有緩衝區的紋理元素,您需要關聯它們。紋理也不能開始和結束,它們可以重疊,甚至可以相同:繪製到2x2緩衝區的1像素紋理將調用4個紋素,它們將全部相同。而且一個紋理元素可以由多種顏色組成,因此黑色和白色紋理就是灰色。 –