低 OpenGL alpha 值裁剪
Low OpenGL alpha values cropping
我已经将一个 DLL 注入到游戏进程中以制作覆盖界面,但问题是 alpha 值正在 "cropped"(根本不呈现)
我已经测试了几个 alpha 值,如果 alpha 低于 0.3,它似乎会失败。
为了说明发生了什么,我要渲染的图像是:
渲染图像的游戏是:
这里到底发生了什么?它是 opengl 的当前状态吗?我是 API 的新手,我不知道为什么会这样。
更多信息:
正在从缓冲区创建纹理:
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, this->width, this->height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, this->buffer);
我从 Awesomium 收到这个缓冲区,值是正确的...我检查了 alpha 值。
渲染是用这个函数完成的(我也试过调用游戏的纹理渲染函数,但出现了同样的问题):
void DrawTextureExt(int texture, float x, float y, float width, float height)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
{
glPushMatrix();
{
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// glBlendFunc(GL_ONE, GL_ONE); << tried this too.. ugly results
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTranslatef(x, y, 0.0);
glRotatef(0, 0.0, 0.0, 1.0);
glTranslatef(-x, -y, 0.0);
glBegin(GL_QUADS);
{
glTexCoord2f(0, 0); glVertex2f(x, y);
glTexCoord2f(0, 1); glVertex2f(x, y + height);
glTexCoord2f(1, 1); glVertex2f(x + width, y + height);
glTexCoord2f(1, 0); glVertex2f(x + width, y);
}
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
}
glPopMatrix();
}
glPopAttrib();
}
在我看来,您正在连接的程序在其渲染功能结束时使用了 alpha 测试(这很有意义),并在最后启用了 alpha 测试,然后您就是 运行 进入。尝试一下如果您首先在挂钩中禁用 alpha 测试会发生什么。 (glDiable(GL_ALPHA_TEST)
).
我已经将一个 DLL 注入到游戏进程中以制作覆盖界面,但问题是 alpha 值正在 "cropped"(根本不呈现)
我已经测试了几个 alpha 值,如果 alpha 低于 0.3,它似乎会失败。
为了说明发生了什么,我要渲染的图像是:
渲染图像的游戏是:
这里到底发生了什么?它是 opengl 的当前状态吗?我是 API 的新手,我不知道为什么会这样。
更多信息:
正在从缓冲区创建纹理:
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, this->width, this->height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, this->buffer);
我从 Awesomium 收到这个缓冲区,值是正确的...我检查了 alpha 值。
渲染是用这个函数完成的(我也试过调用游戏的纹理渲染函数,但出现了同样的问题):
void DrawTextureExt(int texture, float x, float y, float width, float height)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
{
glPushMatrix();
{
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// glBlendFunc(GL_ONE, GL_ONE); << tried this too.. ugly results
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTranslatef(x, y, 0.0);
glRotatef(0, 0.0, 0.0, 1.0);
glTranslatef(-x, -y, 0.0);
glBegin(GL_QUADS);
{
glTexCoord2f(0, 0); glVertex2f(x, y);
glTexCoord2f(0, 1); glVertex2f(x, y + height);
glTexCoord2f(1, 1); glVertex2f(x + width, y + height);
glTexCoord2f(1, 0); glVertex2f(x + width, y);
}
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
}
glPopMatrix();
}
glPopAttrib();
}
在我看来,您正在连接的程序在其渲染功能结束时使用了 alpha 测试(这很有意义),并在最后启用了 alpha 测试,然后您就是 运行 进入。尝试一下如果您首先在挂钩中禁用 alpha 测试会发生什么。 (glDiable(GL_ALPHA_TEST)
).