2017-08-31 57 views
1

這是我第一次嘗試創建一個基本的燈光系統,在頂部使用一個帶有白色圓圈的黑色紋理。我讀了關於這個問題的各種線索,但我只是不知道我做錯了什麼。LibGDX - 基本的2D照明,不知道該怎麼做

我要的是周圍是黑暗和光線很好白色,但改變spritebatch顏色的東西較深將導致光線更暗,即使我重新繪製質地輕

當顏色

所以這就是我想要的(通過強制質地輕取出5次這樣做,但不是一個解決方案,這是一個黑客): what I get if I draw the light 5 times while darkening the screen

這是我得到的(僅1光紋理繪製,但不是很明顯): what I get while darkening the spritebatch and resetting the color to draw the light

這是我得到不變暗spritebatch: what I get by drawing the light without darkening the spritebatch

主要代碼:

Game.sb.begin(); 
//Make stuff darker 
Game.sb.setColor(0.1f, 0.1f, 0.1f,1f); 
sb.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); 
lvl.render(); 
//Reset color 
Game.sb.setColor(1f, 1f, 1f,1f); 
sb.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA); 
//This draws all lights by drawing a texture with the above blending function 
lightM.render(); 
Game.sb.end(); 

燈光對象繪製方法:

Game.sb.setColor(c.r,c.b,c.g, 1f); 
Utils.drawTexture(Assets.get("sprites/lightcircle2.png", Texture.class), pos, size, true); 
Game.sb.setColor(1,1,1,1); 

我是不是做了某種錯誤與爲setColor?使用幀緩衝我一直在考慮,但我不知道這是否會給我光效果我想

順便說一句,這是我的質地輕(它的CC0):

lighttexture

回答

1

可以實現您的需求通​​過以下方式:

  1. 通過使用着色器。 Here是該視頻上的一個小視頻和article

  2. 通過使用FBO和混合,Here是我對這個主題的答案之一。

  3. 您可以在render()方法使用box2dlight,即使不使用box2dbody(如果你不希望任何陰影)

    World world = new World(new Vector2(0,0),false); 
    RayHandler rayHandler = new RayHandler(world); 
    rayHandler.setCombinedMatrix(stage.getCamera().combined); //<-- pass your camera combined matrix 
    new PointLight(rayHandler,1000, Color.WHITE,radius,x_position,y_position); 
    
    所有的渲染後

    而在最後一次通話rayHandler.updateAndRender();

+1

我會嘗試使用FBO和混合,GLSL似乎很複雜,我不想使用box2dlights。謝謝! :d –

相關問題