我將紋理加載到具有各種Alpha值的RGBA格式的內存中。在OpenGL中繪製紋理,同時忽略Alpha通道
的圖像加載爲這樣:
GLuint texture = 0;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
self.texNum = texture;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, self.imageWidth, self.imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, [self.imageData bytes]);
我想知道,這樣的圖像中的alpha通道被視爲全1和紋理繪製像一個RGB圖像,我可以怎樣得出這個紋理。
考慮基本圖像:
此圖像是級數從0到255的α,並且具有在整個255,0,0
的RGB值。然而,如果我與繪製它混合禁用我得到那個看起來像一個形象: www.ldeo.columbia.edu/~jcoplan/alpha/no_alpha.png
當我真正想要的是,像這樣的圖像: www.ldeo.columbia.edu/~jcoplan/alpha/correct.png
我真的很感謝一些指針,讓它完全忽略alpha通道。請注意,我不能只是將圖像作爲RGB加載,因爲我確實需要其他位置的Alpha通道。
編輯:我試圖用GL_COMBINE解決我的問題如此:
glColorf(1,1,1,1);
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_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
[self drawTexture];
但仍沒有運氣,它吸引黑變紅仍。
這兩個解決方案建議看起來是正確的。查看調試器內存視圖中[self.imageData bytes]返回的指針。你期望的價值是什麼?你得到的結果表明他們不會是... – 2010-07-08 17:34:56
你使用預乘alpha嗎?如果是這樣,那麼淡入黑色就是紋理的RGB值。你的glBlendFunc是什麼? – Alan 2010-07-08 17:38:47
@Alan&brone 看完它們的字節後,這是正確的,圖像正在通過XCode優化預倍增,並且字節內部並非我所期望的。 所以答案是我沒有正確加載圖像。 謝謝! – jcoplan 2010-07-08 18:04:19