我想在openGL中使用紋理進行並行計算(openCL不是一個選項)。我知道從左下角的每個軸上的域爲0.0到1.0。但是,在將像素映射到像素的左上角還是像素的中間時,像素的座標是?openGL像素座標
Ex。如果我有一個100x100px的紋理。是最左上角像素的座標(0.0,1.0)還是(0.005,0.995)?我認爲這是前者,但一直在獲得一些意想不到的結果。我在想,如果我正在訪問「像素邊界」上的數據,並且openGL將插值到一個將兩個相鄰像素平均的值。
我想在openGL中使用紋理進行並行計算(openCL不是一個選項)。我知道從左下角的每個軸上的域爲0.0到1.0。但是,在將像素映射到像素的左上角還是像素的中間時,像素的座標是?openGL像素座標
Ex。如果我有一個100x100px的紋理。是最左上角像素的座標(0.0,1.0)還是(0.005,0.995)?我認爲這是前者,但一直在獲得一些意想不到的結果。我在想,如果我正在訪問「像素邊界」上的數據,並且openGL將插值到一個將兩個相鄰像素平均的值。
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.005,0.995)。
由於Nicol Bolas在評論中提到,您可以通過在創建紋理時將過濾方法更改爲GL_NEAREST
來防止在像素之間插值。
您可以使用'GL_NEAREST' [關閉過濾](http://www.opengl.org/wiki/Sampler_Object#Filtering)。 –
關閉過濾不能解決fencepost問題。 – datenwolf
我沒有回答這個問題,已經在這裏: http://stackoverflow.com/a/5879551/524368 [OpenGL的紋理座標在像素空間(的 – datenwolf