Slick2d / LWJGL在OpenGL层调整alpha通道(Java)

时间:2016-10-13 17:29:53

标签: java opengl lwjgl alpha slick2d

我为一些无知而道歉,因为我对Slick2D和LWJGL相当新。基本上我正在尝试做的是通过用GL_QUADS矩形覆盖它来使场景看起来像夜晚时间,该矩形是蓝色的并且是半透明的。

那部分很容易。我想要做的是在这个层中绘制三角形,这样可以改变alpha通道。我想这样做的原因是,我可以通过降低蓝色有色矩形的不透明度来模拟光源,因为它靠近光源。

我举了一个例子,说明绿色是背景的预期结果,蓝色是蓝色有色矩形产生的夜间效果,中心的光源越来越暗淡。

我需要找到一种方法来处理三角形,因为我创建了一个光线投射算法,将结果生成为一系列渐变三角形。

如果解释得不好,我道歉。我会回答你的任何问题。

Intended result

以下是用于创建蓝色矩形的代码块:

    glColor4f (0.0f,0.0f,1.0f,0.4f);
    glBegin(GL_QUADS);
    glVertex2f(0,0);
    glVertex2f(screenWidth,0);
    glVertex2f(screenWidth,screenHeight);
    glVertex2f(0,screenHeight);
    glEnd();

我想编写以下代码的修改版本来调整该矩形的alpha通道。

    glBegin(GL_TRIANGLES);
    setAlphaOfPriorLayer(0.0f);
    glVertex2f(x1,y1);
    setAlphaOfPriorLayer(0.4f);
    glVertex2f(x2,y2);
    setAlphaOfPriorLayer(0.4f);
    glVertex2f(x3,y3);
    glEnd();

同样,我使用三角形来近似圆圈并允许正确的光线投射。

1 个答案:

答案 0 :(得分:0)

为了实现这一点,使用帧缓冲对象非常有用。 FBO允许您实际渲染到纹理,然后可以在屏幕上显示。在我的特殊情况下,我将元素渲染到FBO,然后使用着色器将其绘制到屏幕上以获得所需的不透明度。