2015-01-12 4 views
0

Im пытается сделать освещение в OpenGL, идея его заключается в визуализации объектов нормально (с любым альфа)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 color (GL11.GL_DST_COLOR), а для альфы добавьте src alpha и dst alpha, если мои мысли верны, чем rect (100, 100), мне нужен тот же цвет, что и правый (300, 100), но результат:

enter image description here

ответ

0

BlendFunc устанавливает коэффициент, с которым умножается цвет. Для Destinationcolor вы задали коэффициент самому цвету, который дает вам квадрат результата.

Попробуйте установить GL11.GL_DST_COLOR на GL11.GL_ONE

 Смежные вопросы

  • Нет связанных вопросов^_^