我想要实现的是一种混合,我在彼此上绘制两个四边形,两个都是透明的,最后绘制的四边形将完全取消前一个四边形的颜色,就像它从未出现过一样。但是,除了那个单一的其他四边形之外,它可能不会影响它背后因为我解释起来很可怕,所以我做了以下图片:
我正在使用非常基本的openGL立即模式功能。 目前我有以下几点:
glEnable(GL_BLEND)
glColor4f(0,0,1,0.3f);
glBegin(GL_QUADS);
{
glVertex2d(100, -100);
glVertex2d(-100, -100);
glVertex2d(-100, 100);
glVertex2d(100, 100);
}
glEnd();
glColor4f(0,1,0,0.3f);
glBegin(GL_QUADS);
{
glVertex2d(150, -50);
glVertex2d(-50, -50);
glVertex2d(-50, 150);
glVertex2d(150, 150);
}
glEnd();
答案 0 :(得分:3)
这本身并不是一个混合问题。
解决此问题的一种方法是更改深度缓冲区比较功能。
使用GL_LESS
作为绿色方块,同时首先绘制蓝色方块。
这样,绿色正方形的像素与蓝色正方形重叠,根本不会被绘制开始。
glDepthFunc(GL_LEQUAL);
// Draw the blue square
glDepthFunc(GL_LESS);
// Draw the green square
如果您希望在蓝色和绿色方块下都可以看到元素。您可以绘制第一个然后清除深度缓冲区然后它是相同的。
glDepthFunc(GL_LEQUAL);
// Draw the red squares
glClear(GL_DEPTH_BUFFER_BIT);
glDepthFunc(GL_LEQUAL);
// Draw the blue square
glDepthFunc(GL_LESS);
// Draw the green square
是否有更简单的方式来做,取决于总体目标是什么。