2017-08-31 7 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(); 

ライトオブジェクトのdrawメソッド:

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はこのトピックに関する私の答えの1つです。 (あなたがどんな影をしたくない場合)

  3. あなたはrender()方法で、すべてのレンダリング後

    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();でさえbox2dbodyを使用せずに、box2dlightを使用することができます。

+1

FBOとブレンドを使用しようとすると、GLSLは複雑に思えますが、私はbox2dlightsを使いたくありません。ありがとう! :D –

関連する問題