2016-10-03 105 views
1

在OpenGL ES中,顏色範圍從0-1f。這些值是否直接映射到0-255,也就是8位?或者0-1f範圍在高於8位時能達到更精細的顏色嗎?Android OpenGL ES中的灰度顏色深度

我正在編程生成一個模式,其中rgb是相等的(因爲它是灰度),所以這個圖像是8位的。我想要在灰度上實現更深的顏色深度,例如16位,這可能嗎?

回答

1

取決於您的輸入/輸出紋理格式;如果它是RGB565那麼它將小於8位,如果它是RGB10_A2那麼它將超過8位。

通常以比原始數據更高的精度完成紋理過濾(例如雙線性或三線性),因此可能導致不完全例如8位紋理的1/256的倍數。

我想在灰度上實現更深的顏色深度,例如16位,這可能嗎?

的OpenGL ES 3.0具有廣泛的整數格式,OpenGL ES的ES 3.2具有FP16和FP32格式,因此它是絕對有可能以每信道超過8位存儲相對任意的數據。

但是,真正的問題是出於什麼目的?如果您打算在屏幕上顯示該值,那麼您可能沒有任何設備能夠實現每通道顏色16位的顯示。幾乎所有的消費級顯示器和移動設備面板都是每個顏色通道8位(移動設備中,很多甚至不接受8位數據,但只在面板上顯示6位或7位精度)。

+0

感謝您的回答。我正在做的是以編程方式生成一個我想要展示的模式,並且我希望在對比中實現非常好的差異。例如,如果我在rgb灰度中有一個最大值爲250和最小值爲248的模式,並在其間插入值,則這是我可以用8位分辨率顯示的絕對最小對比度。我可以改變它的亮度,但最終我想更好地控制這些值。 此外,我不使用位圖,我將顏色數據與頂點直接傳遞給着色器。這有什麼區別嗎? – Karam

+0

您可以進行某種色調映射 - 將輸入顏色範圍重新映射到不同的東西。查看一些想法的HDR色調映射技術;許多概念與您嘗試的概念類似(將一個亮度範圍向上或向下縮放到不同的顯示範圍)。這不是微不足道的 - 尤其是在擴展增加對比度時 - 您可能需要進行一些過濾以避免出現問題。但是,在一天結束時,您將達到您使用的面板的8位限制。 – solidpixel