簡體   English   中英

GLSL采樣器如何確定紋理的縮小,從而確定mipmap級別?

[英]How does a GLSL sampler determine the minification, and thus the mipmap level, of a texture?

我正在使用OpenGL ES(通過WebGL),但我認為這個問題也適用於完整的OpenGL配置文件。

假設我創建了一個具有完整mipmap級別的OpenGL紋理,並將其TEXTURE_MIN_FILTER設置為NEAREST_MIPMAP_NEAREST。 還假設我有一個片段着色器來對此紋理進行采樣。 根據紋理的縮小程度選擇mipmap級別,但是如何選擇縮小程度?

在我的例子中,我正在合成(在着色器內)我用來對紋理進行采樣的紋理坐標。 實際上,我的紋理坐標不是基於任何傳入的變化。 即使我在這個紋理上啟用了mipmapping,它似乎也沒有任何效果。 這是預期的嗎? 我是否需要自己計算LOD並將bias參數用於texture2D? (沒有texture2DLOD,因為我正在使用ES)

並行計算相鄰像素的塊。 (例如,IIRC,PowerVR芯片一次執行4x4塊。)當您在片段着色器中調用texture2D時,采樣器同時為所有16個像素提取所有16個樣本,因此具有計算縮小所需的鄰接信息水平。 這是為什么相鄰像素從紋理的附近區域采樣非常重要的部分原因。

請注意,這僅適用於片段着色器。 在頂點着色器中,始終使用第一個mipmap級別(除非使用了Texture2D的Lod版本。)

您可以任意計算紋理坐標,着色器將相應地...在一個限制內。 您的計算不能涉及任何條件邏輯。 它們可以涉及變化,制服,常數,從其他紋理采樣的值,無論你想要什么。 但是當你在那里作為一個?:運算符滑落的那一刻(更不用說if語句),你就遇到了麻煩。

既然你在OpenGL ES領域,那么你就沒有足夠的工具讓自己擺脫困境。 Desktop GL 3.0為您提供了textureGrad函數集,它允許您在到達條件邏輯之前計算漸變。 但如果沒有這個,你就無能為力。

暫無
暫無

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

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