**已关闭。**此问题需要debugging details。它目前不接受回答。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答这个问题。
11天前关闭。
Improve this question的
我正在开发一个Rendition Verite Package 器,以便在使用OpenGL的现代系统上运行为其设计的游戏。
我正在修复的一个游戏有一个奇怪的问题。混合将忽略Alpha值。就好像混合被禁用了。
如果我执行此操作(禁用着色器),要测试在交换缓冲区(已渲染游戏图形)之前混合是否正常,请执行以下操作:
GLint p{}; glGetIntegerv(GL_CURRENT_PROGRAM, &p);
glUseProgramObjectARB(0);
GLint tex{};
glGetIntegerv(GL_TEXTURE_BINDING_2D, &tex);
bool b = glIsEnabled(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//glBlendFunc(GL_ZERO, GL_ZERO);
//glBlendFunc(GL_ZERO, GL_ONE);
glEnable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D, 0);
glBegin(GL_TRIANGLES);
GLfloat alpha = 0.3f;
glColor4f(1.0, 0.0, 0.0, alpha);
glVertex3f(320.0, 0.0, 0.0);
glColor4f(.0, 1.0, 0.0, alpha);
glVertex3f(0.0, 479.0, 0.0);
glColor4f(.0, 0.0, 1.0, alpha);
glVertex3f(639.0, 479.0, 0.0);
glEnd();
glBindTexture(GL_TEXTURE_2D, tex);
字符集
在游戏中,不工作(苏打水越野),它产生了一个坚实的三角形覆盖在游戏的顶部。
SODA渲染到帧缓冲区。设置glBlendFunc(GL_ZERO,GL_ZERO)或glBlendFunc(GL_ZERO,GL_ONE)也没有区别。
在可以工作的游戏中,这会覆盖一个透明三角形(SRC_ALPHA),黑色三角形(GL_ZERO,GL_ZERO)或什么都没有(GL_ZERO,GL_ONE)。据我所知,这应该只是工作时渲染到帧缓冲区;这个游戏不使用渲染到纹理。
我不需要在屏幕上渲染一个巨大的三角形,只是Alpha纹理在我的着色器中没有正确渲染。
if(alpha==0.0)
discard;
型
确实有效但没有融合
设置glDepthFunc(GL_ALWAYS)。glGetIntegerv(GL_BLEND)返回true;
我的问题是,上面的块是如何不混合的?结果是完全相同的nvidia GTX1060和英特尔HD 4000,HD2000。
我尝试了混合因子:
glBlendFunc(GL_ZERO, GL_ZERO);
型
和/或
glBlendFunc(GL_ZERO, GL_ONE);
型
没有效果。就像混合没有启用。但是GL_BLEND的OpenGL查询返回GL_TRUE。
它在其他游戏中运行得很好。
1条答案
按热度按时间wsewodh21#
结果是glLogicOp被设置为GL_COPY。
渲染游戏支持光栅操作,这个特定的游戏将RRedline模式设置为V_ALUMODE_SRC,我将其转换为GL_COPY。
光栅操作似乎禁用了混合(实际上是有意义的):
字符集
看起来很管用