2013-02-06 157 views
1

我想在openGL中使用紋理進行並行計算(openCL不是一個選項)。我知道從左下角的每個軸上的域爲0.0到1.0。但是,在將像素映射到像素的左上角還是像素的中間時,像素的座標是?openGL像素座標

Ex。如果我有一個100x100px的紋理。是最左上角像素的座標(0.0,1.0)還是(0.005,0.995)?我認爲這是前者,但一直在獲得一些意想不到的結果。我在想,如果我正在訪問「像素邊界」上的數據,並且openGL將插值到一個將兩個相鄰像素平均的值。

+1

您可以使用'GL_NEAREST' [關閉過濾](http://www.opengl.org/wiki/Sampler_Object#Filtering)。 –

+1

關閉過濾不能解決fencepost問題。 – datenwolf

+1

我沒有回答這個問題,已經在這裏: http://stackoverflow.com/a/5879551/524368 [OpenGL的紋理座標在像素空間(的 – datenwolf

回答

4

OpenGL像素/片段概念上是以半整數像素爲中心的1x1正方形。 OpenGL 4.5規範指出:

片段位於其左下角,位於整數 網格座標上。光柵化操作還涉及片段的中心,它從左下角偏移(1/2,1/2)(並且 因此位於半整數座標上)。

因此,對於100x100像素,紋理元素之間的水平距離爲1/100 = 0.01。因此左邊緣和第一個文本中心之間的距離爲0.01/2 = 0.005。

從左下角開始的第一個垂直紋理元素中心也是0.005,所以從頂部開始,第一個紋理元素中心爲1.0 - 0.005 = 0.995。

這就是爲什麼你得到這些數字。

你可以看到my post here瞭解更多細節(tex座標到最後)。

0

像素的中心實際上是後者,即(0.005,0.995)。

由於Nicol Bolas在評論中提到,您可以通過在創建紋理時將過濾方法更改爲GL_NEAREST來防止在像素之間插值。