簡體   English   中英

在OpenGL中的片段着色器中獲取原始紋理顏色

[英]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.

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