我對不同的圖像位深度着色器和查找表工作。 所以我有很好的作品,但對於查找我需要知道紋理的內部格式。其實這只是間接的事實,但它會完全服務於我。所以這是我:如何找出紋理的格式GLSL
#version 150
precision highp float;
uniform samplerBuffer LutData;
uniform sampler2D Texture;
void main()
{
color = texture(Texture, fragTexCoord);
// R16 grayscale texture - handle 16bit wise mono
float primaryLvl = color.r;
int index = int(primaryLvl * 65535);
float gray = texelFetch(LutData, index).r;
finalColor = vec4(gray, gray, gray, 1);
}
縮短版本(因此可能無法正常工作)
我需要的是這(僞代碼+僅主):
void main()
{
// need follows here:
int lutspread = gettextureparam(Texture, MaxRange);
color = texture(Texture, fragTexCoord);
// R16 grayscale texture - handle 16bit wise mono
float primaryLvl = color.r;
int index = int(primaryLvl * lutspread);
float gray = texelFetch(LutData, index).r;
finalColor = vec4(gray, gray, gray, 1);
}
難道這樣的事情存在?
因此,lutspread
是255或65535.因爲「正常」採樣器所做的是:它們將紋理整數解釋爲標準化整數,導致浮點值在0.0-1.0之間。紋理格式是RED8還是RED16,它只是或多或少的粒度沒有區別!然而,如果一個LUT是遊戲的一部分,這個功能是非常有效的,因爲LUT需要原始數據。
順便說一句:我已經有我不太成功的嘗試,使用GL_REDui
和GL_RED_INTEGER
作爲紋理生成參數。我擔心它使用GL_RED8
/GL_RED16
+ GL_LUMINANCE
你可以告訴我去這條道路,但我會很害怕失去的東西我至今讓我比我目前的做法更多的問題。最終我會介紹一件制服,並將其作爲我的因素。
的問題是,整個圖像是相同的灰色。無法真正瞭解發生了什麼事。由此暗示代碼vec4顏色=紋理(usampler2D)將產生例如vec4(1234.0f ,,,)==例如不0.0-1.0的範圍內 – Robetto