2013-11-02 29 views
0

在OpenGL 1.x中,您可以簡單地將紋理附加到頂點四邊形以顯示圖像,使用線性放大鏡參數可以將紋理拉伸或最小化爲沒有「看到」它變得「像素化」的像素中的一個sidderent大小。Android:在opengl中實現線性放大鏡es2.0

在OpenGL es 2.0中,還有另一種渲染方法:使用頂點和片段着色器。 所以只需渲染貼圖(圖像)一個需要寫他自己的片段着色器爲它在屏幕上 - 是這樣的:

uniform sampler2D texture; 
varying vec2 point; // coming from the vertex 

void main() { 
    gl_fragColor(texture2D(texture, point)); 
} 

這裏的問題是,發生放大鏡類型是最近的一種。它取得變量「point」指向的最接近像素的值。

我需要一個線性放大鏡。

我的問題在這裏是:我如何在代碼方面實現這樣的事情? 或者我從開始做錯了什麼?

沒有片段着色器的預設可用於此類型的at事情。

回答

0

對於此片段着色器沒有預設,因爲它使用與固定功能管道相同的狀態。 A sampler2D uniform是可編程管道中紋理單元的接口,當您在ES 2.0中採樣綁定到紋理單元的紋理時,包裝狀態,過濾器模式等全部從當前綁定的紋理對象中獲取。您可以像在ES 1.0中一樣設置這些狀態。您無法在片段着色器或頂點着色器中更改它們,但您不需要僅僅將紋理對象與適當的狀態綁定即可。

桌面GL(3.3/4.0 +)定義了一種稱爲採樣器對象的東西,它將實際紋理對象的包裝模式和過濾器分離出來。老實說,它應該一直工作,紋理對象定義數據存儲和採樣器狀態都是浪費的。不幸的是,這在OpenGL ES 2.0中不存在,所以請記住,您提到的過濾器狀態與紋理對象有關,並且不是您可以在着色器中可編程設置的。