簡體   English   中英

OpenGL紋理合並器-漸變紋理

[英]OpenGL Texture Combiner - gradient texture

我有2個RGBA8紋理:

A)“主要”紋理,其中包含要在所有通道中顯示的數據

B)僅在Alpha中具有有意義數據的“漸變”紋理(當然,這實際上應該只是A8紋理)

使用OpenGLES 1.1紋理合並器,我希望生成的紋理像素從紋理#A復制RGB,並使用從兩個紋理調制的alpha(紋理A的alpha *紋理B的alpha)。

我在使用紋理組合器代碼時遇到了麻煩(我已經嘗試過使用它了),並且想知道是否有人可以發現問題:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, geometryP->texName);
glTexCoordPointer(2, GL_BYTE, 0, geometryP->texCoordsP);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, mGradientTextureName);
glTexCoordPointer(2, GL_BYTE, 0, geometryP->texCoordsP);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);

我得到的結果基本上看起來就像是紋理#A(主要紋理)的RGBA。

我可能不在,但您確定要注意紋理坐標問題嗎? 您似乎在調用glTexCoordPointer之前並沒有做glClientActiveTexture ...

BindTexture,TexEnv,glEnable(GL_TEXTURE_2D)和Texture Matrix受ActiveTexture影響,而TexCoordPointer則不受此影響。 實際上,第二個TexCoordPointer是不必要的,並且第一個調用可以按任何順序進行。 我一直在胡鬧一些,最近的代碼是:

glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, geometryP->texName);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mGradientTextureName);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);  
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);

我覺得這個新代碼是正確的,但是我的漸變紋理可能是錯誤的,所以我仍在努力:)

Bahbar,對不起,您對glClientActiveTexture確實是正確的-我以前從未聽說過(並且在上次答復中將其與glActiveTexture混淆了)。 但是在使用了那個並為TEXTURE1設置了glEnableClientState和glTexCoordPointer之后,它就可以了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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