[英]Get original texture color in a Fragment Shader in OpenGL
所以,我需要制作一個着色器,用給定的顏色替換紋理中的灰色。 如果我將顏色設置為給定的特定顏色,片段着色器可以正常工作
gl_FragColor = vec4(1, 1, 0, 1);
但是,當我嘗試檢索紋理的原始顏色時,我收到錯誤。 由於某種原因,它總是返回黑色。
uniform sampler2D texture; //texture to change
void main() {
vec2 coords = gl_TexCoord[0].xy;
vec3 normalColor = texture2D(texture, coords).rgb; //original color
gl_FragColor = vec4(normalColor.r, normalColor.g, normalColor.b, 1);
}
從理論上講,它應該什么也不做 - 紋理應該保持不變。 但它完全變黑了。 我認為問題在於我不確定如何將紋理作為參數傳遞給統一變量。 我目前正在使用ID(整數),但似乎總是返回黑色。 所以我基本上不知道如何設置均勻紋理的值(或者以任何其他方式獲取它,而不使用參數)。 代碼(用Java):
program.setUniform("texture", t.getTextureID());
我正在使用我從這里獲得的Program類,以及SlickUtils Texture類,但我相信這是無關緊要的。
program.setUniform("texture", t.getTextureID());
^^^^^^^^^^^^^^^^
不,不,不。
紋理對象ID 永遠不會穿制服。
傳入要從中采樣的紋理單元的索引。
所以如果你想從第n
個紋理單元( GL_TEXTURE0 + n
)中取樣,則傳入n
:
program.setUniform("texture", 0);
^ or whatever texture unit you've bound `t` to
除了genpfault所說的,當你說“用給定的顏色替換紋理中的灰色”時, 最好是“將顏色從一種紋理寫入另一種紋理,而不是用不同的顏色替換灰色”的簡寫。 因為不允許同時在同一紋理中讀取和寫入同一圖像 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.