2015-01-12 52 views
0

林試圖使在OpenGL照明,它 想法是normaly渲染對象(具有任何α)OpenGL的阿爾法混合用於點亮

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)中的正確需要與我相同的顏色300,100)但結果:

enter image description here

回答

0

BlendFunc設置Color乘以的因子。 對於Destinationcolor,您已將因子設置爲顏色本身,從而得到平方的結果。

嘗試將GL11.GL_DST_COLOR設置爲GL11.GL_ONE