我正在嘗試使用iOS和GL ES1進行全屏渲染來渲染紋理。我已經實現了使用具有附加紋理的FBO並且工作正常。OpenGL ES渲染到非POT紋理
但我不確定我的方法是否正確: iPhone屏幕不是兩倍冪,所以我所做的是將glViewport設置爲最近的POT值以匹配紋理大小,然後將其映射到四元組與屏幕的大小相同。這有效,但圖像看起來有點模糊。
是否可以繪製附加到FBO的紋理的一部分,然後相應地映射四維UV座標?
另一種方法是使用非鍋紋理,但我想避免這種情況。
我正在嘗試使用iOS和GL ES1進行全屏渲染來渲染紋理。我已經實現了使用具有附加紋理的FBO並且工作正常。OpenGL ES渲染到非POT紋理
但我不確定我的方法是否正確: iPhone屏幕不是兩倍冪,所以我所做的是將glViewport設置爲最近的POT值以匹配紋理大小,然後將其映射到四元組與屏幕的大小相同。這有效,但圖像看起來有點模糊。
是否可以繪製附加到FBO的紋理的一部分,然後相應地映射四維UV座標?
另一種方法是使用非鍋紋理,但我想避免這種情況。
我會說你的方法是好的,除了一件事。您編寫了「最近的POT值以匹配紋理大小」,請勿使用最近的,使用最近的大的。如果你縮減它的結果應該有點模糊。因此,創建大於屏幕本身的POT紋理,將其附加到幀緩衝區,使用與屏幕具有相同參數的視圖端口,然後如果需要使用該紋理重新顯示,請使用紋理座標,如screen.width/texture.width
而不是1.0
。這應該給你一個很好的1:1取樣,結果應該儘可能清楚。
感謝您的回答!是的,對不起,通過「最近的POT紋理」我的意思是「最接近的POT」,正如你所說的那樣。 :)。看起來紋理的其餘部分由openGL自動填充爲白色。 –
如果你完全清除緩衝區,它應該被填滿垃圾或清除顏色(你可能甚至不需要) –
爲什麼不簡單渲染到NPOT紋理?除了最古老的iOS設備(原始iPhone,iPhone 3G)[支持NPOT紋理]之外的所有設備(http://stackoverflow.com/questions/4760174/rendering-to-non-power-of-two-texture-on-iphone/4761453 #4761453)。這些舊設備在當今使用的設備中所佔的比例微不足道,因此可以忽略它們。 –
你是對的,但我也計劃一個Android端口,我不確定是否所有的Android設備提供NPOT支持。我也聽說Npot紋理通常比底部稍慢。 –