用于照明的OpenGL alpha混合

时间:2015-01-12 11:28:18

标签: opengl lwjgl alpha lighting blending

我试图在opengl中制作灯光, 它的想法是正常渲染对象(使用任何alpha)

GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 

        GL11.glColor4d(0 , 0 , 1 , 0.5);
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex2d(100 , 100);
        GL11.glVertex2d(100 , 200);
        GL11.glVertex2d(200 , 200);
        GL11.glVertex2d(200 , 100);
        GL11.glEnd();

        GL11.glColor4d(0 , 0 , 1 , 1);
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex2d(300 , 100);
        GL11.glVertex2d(300 , 200);
        GL11.glVertex2d(400 , 200);
        GL11.glVertex2d(400 , 100);
        GL11.glEnd();

然后渲染灯

GL14.glBlendFuncSeparate(GL11.GL_ZERO, GL11.GL_DST_COLOR, GL11.GL_ONE, GL11.GL_ONE);

        GL11.glColor4d(1 , 1 , 1 , 0.5);
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex2d(100 , 150);
        GL11.glVertex2d(150 , 150);
        GL11.glVertex2d(150 , 100);
        GL11.glVertex2d(100 , 100);
        GL11.glEnd();

所以它忽略src颜色(GL11.GL_ZERO)但是保持dst颜色(GL11.GL_DST_COLOR)并且对于alpha它添加src alpha和dst alpha,如果我的想法比rect(100,100)中的rect更正需要我颜色为正确的(300,100)但结果:

enter image description here

1 个答案:

答案 0 :(得分:0)

BlendFunc设置Color乘以的因子。 对于Destinationcolor,您已将因子设置为“颜色”本身,从而为您提供平方结果。

尝试将GL11.GL_DST_COLOR设置为GL11.GL_ONE