我使用函数像下面加载两个纹理:忽略某些颜色阿尔法混合
GLuint LoadImage(std::string ImageTitle, GLenum Target)
{
Image Img(ImageTitle.c_str());
std::vector<std::uint8_t> Buffer, Out(((Img.Width() * Img.GetBitsPerPixel() + 31)/32) * 4 * Img.Height());
ImageToBuffer(Buffer, Img);
FlipImageBytes(Buffer.data(), Out.data(), Img.Width(), Img.Height(), Img.GetBitsPerPixel());
GLuint ID;
glGenTextures(1, &ID);
glBindTexture(Target, ID);
glTexParameteri(Target, GL_TEXTURE_WRAP_S, Target == GL_TEXTURE_2D ? GL_REPEAT : GL_CLAMP_TO_EDGE);
glTexParameteri(Target, GL_TEXTURE_WRAP_T, Target == GL_TEXTURE_2D ? GL_REPEAT : GL_CLAMP_TO_EDGE);
glTexParameteri(Target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(Target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(Target, 0, Img.GetBitsPerPixel() == 32 ? GL_RGBA : GL_RGB, Img.Width(), Img.Height(), 0, Img.GetBitsPerPixel() == 32 ? GL_BGRA : GL_BGR, GL_UNSIGNED_BYTE, Out.data());
return ID;
}
第一纹理是地图和我绘制在屏幕上正常。第二个纹理是黑色的,上面有红色文字,这是我想要在地图纹理上绘制的纹理。但是,我想忽略黑色像素,以便它只绘制红色文字。
我画使用下列内容:
void DrawTexture(GLenum Target, GLuint ID, float X1, float Y1, float X2, float Y2, int Width = 1, int Height = 1)
{
//glEnable(Target);
//glBindTexture(Target, ID);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(X1, Y1);
glTexCoord2f(0, Height);
glVertex2f(X1, Y2);
glTexCoord2f(Width, Height);
glVertex2f(X2, Y2);
glTexCoord2f(Width, 0);
glVertex2f(X2, Y1);
glEnd();
glDisable(Target);
}
int X1 = 0, Y1 = 0, X2 = 512, Y2 = 512;
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
//Draw MAP.
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, ID);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
DrawTexture(GL_TEXTURE_2D, MAPID, 0, 0, 512, 512);
glFlush();
//Draw TEXT..
glBindTexture(GL_TEXTURE_2D, ID2);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBlendFunc(GL_ONE, GL_DST_ALPHA);
DrawTexture(GL_TEXTURE_2D, TEXTID, 0, 0, 512, 512);
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
SwapBuffers(DC);
Sleep(1);
我想要做的事:
std::vector<std::uint8_t> Buffer;
//Fill Buffer with Pixels.
glDrawPixels(Width, Height, .........);
但是,它不会使第二图像上的黑色像素透明。我怎样才能让它绘制除了仅在第二个纹理中的黑色以外的每个像素?所以通常先绘制第一个纹理,然后画第二个忽略黑色。
我尝试使用glDrawPixels(我宁愿用这个绘制黑色文本像素如果可能的话)
任何想法?
我尝试了所有这一切,我到处问:http://www.gamedeception.net/threads/26235-Draw-and-Ignore-specific-Colour?p=173131 它没有出来的权利。不,它没有alpha通道,它是24位BMP/Png。尝试了两种格式。 – Brandon