簡體   English   中英

Android:在opengl es2.0中實現線性放大鏡

[英]Android: implementing the linear magnifier in opengl es2.0

在OpenGL 1.x中,您可以簡單地將紋理附加到一個頂點的四邊形以顯示圖像,使用線性放大鏡參數,您可以將紋理拉伸或最小化到一個以像素為單位的大小,而無需“看到”它被“像素化”。 。

在OpenGL es 2.0中,還有另一種渲染方法:使用頂點和片段着色器。 因此,您只需在屏幕上渲染紋理(圖像),就需要為其編寫自己的片段着色器-類似於:

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

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

這里的問題是發生的放大鏡類型是NEAREST類型。 它采用變量“ point”指向的最近像素的值。

我需要一個線性放大器。

我在這里的問題是:我該如何在代碼方面實現這樣的事情? 還是我從一開始就做錯了?

根本沒有片段着色器的預設可用於這種類型的東西。

片段着色器中沒有為此的預設,因為它使用的狀態與固定功能管線相同。 sampler2D制服是可編程管線中紋理單元的接口,當您在ES 2.0中對綁定到紋理單元的紋理進行采樣時,包裝狀態,濾鏡模式等均取自當前綁定的紋理對象。 您可以像在ES 1.0中一樣設置這些狀態。 您是正確的,您無法在片段或頂點着色器中對其進行更改,但您不必這樣做,只需將紋理對象綁定到適當的狀態即可。

桌面GL(3.3 / 4.0 +)定義了一個稱為采樣器對象的對象,該對象將環繞模式和濾鏡與實際紋理對象分離。 老實說,這就是它應該一直工作的方式,讓紋理對象定義數據存儲和采樣器狀態是浪費的。 不幸的是,這在OpenGL ES 2.0中不存在,因此請記住,您提到的濾鏡狀態與紋理對象相關,並且不是可以在着色器中以可編程方式設置的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM