gpt4 book ai didi

c++ - 忽略特定颜色的更好方法 - Blit

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:40 26 4
gpt4 key购买 nike

我得到了一个不断变化/更新的缓冲区,我需要将这个缓冲区的像素 blit 到屏幕上。对于我的测试代码,我读取了一个位图并将其存储到缓冲区中。问题是,我想在使用 OpenGL 将特定颜色 blit 到屏幕时忽略它。

目前我使用:

glPushMatrix();
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
unsigned char* Data = (unsigned char*)Buffer;

for (int I = Bmp.Height(); I > 0; --I)
{
for (int J = 0; J < Bmp.Width(); ++J)
{
if (Data[0] != 0 && Data[1] != 0 && Data[2] != 0) //If the colour is black, we don't draw it..
{
glRasterPos2i(J, I);
glDrawPixels(1, 1, GL_BGR, GL_UNSIGNED_BYTE, Data);

}

Data += Bmp.Bits() == 32 ? 4 : 3;

if(Bmp.Bits() == 24)
Data += (-Bmp.Width() * 3) & 3;
}
}

glPopMatrix();
SwapBuffers(DC);
Sleep(1);

所以在上面,我有一些叫做 Data 的 Buffer 指针。然后我在给定高度和宽度的情况下循环遍历它。如果颜色是黑色,我不绘制它。否则,我将 glDrawPixelsglRasterPos2i 结合使用,一次将一个像素绘制到屏幕上。有没有更有效的方法可以让它绘制除特定颜色以外的所有像素?它是缓冲区而不是纹理。我以 Bmp 为例。

最佳答案

您可以使用模板缓冲区。还有一些方法可以使用像素着色器进行色键。

关于c++ - 忽略特定颜色的更好方法 - Blit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com