0

我想要实现的是一种混合,我在彼此上方绘制两个四边形,都是透明的,最后绘制的四边形将完全取消前一个四边形的颜色,就好像它从未存在过一样。但是,除了单个其他四边形之外,它可能不会影响其后面的任何东西。因为我在解释方面很糟糕,所以我制作了以下图片:

在此处输入图像描述

我正在使用非常基本的 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();
4

1 回答 1

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

是否有更简单的方法来做到这一点,取决于总体目标是什么。

于 2017-08-09T13:37:05.370 回答