2017-08-09 16 views
2

私は透明な円と黒の周りのすべてをアルファで作成しようとしています。私はこのコードを使用していて、何とか動作しません。 透明サークルブラック周り

Gdx.gl.glEnable(GL20.GL_BLEND); 
Gdx.gl.glBlendFunc(GL20.GL_DST_COLOR, GL20.GL_ZERO); 
Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD); 
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); 
shapeRenderer.setColor(new Color(1, 1, 1, 1f)); 
shapeRenderer.circle(150,500,300); 
shapeRenderer.end(); 
Gdx.gl.glDisable(GL20.GL_BLEND); 

が、私はこれをしたい:あなたはあなたの条件のため FrameBufferを使用することができます

enter image description here

答えて

2

。ここで

public class GdxTest extends ApplicationAdapter implements InputProcessor { 

    FrameBuffer frameBuffer; 
    SpriteBatch spriteBatch; 
    OrthographicCamera camera; 

    Vector3 vector3; 

    Texture texture,texture1; 
    Sprite sprite; 

    @Override 
    public void create() { 

     vector3=new Vector3(); 
     camera=new OrthographicCamera(); 
     camera.setToOrtho(false,Gdx.graphics.getWidth(),Gdx.graphics.getHeight()); 
     spriteBatch=new SpriteBatch(); 

     texture=new Texture("light.png"); 

     sprite=new Sprite(texture); 
     sprite.setSize(150,150); 
     texture1=new Texture("badlogic.jpg"); 

     Gdx.input.setInputProcessor(this); 
    } 

    @Override 
    public void render() { 

     frameBuffer.begin(); 

     Gdx.gl.glClearColor(.2f,.2f,.2f,1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     spriteBatch.setProjectionMatrix(camera.combined); 
     spriteBatch.setBlendFunction(GL20.GL_ONE,GL20.GL_ONE); 
     spriteBatch.begin(); 
     sprite.draw(spriteBatch); 
     spriteBatch.end(); 

     frameBuffer.end(); 

     spriteBatch.setBlendFunction(GL20.GL_SRC_ALPHA,GL20.GL_ONE_MINUS_SRC_ALPHA); 
     spriteBatch.begin(); 

     spriteBatch.draw(texture1,100,100); 
     spriteBatch.end(); 

     spriteBatch.setProjectionMatrix(spriteBatch.getProjectionMatrix().idt()); 

     spriteBatch.setBlendFunction(GL20.GL_ZERO,GL20.GL_SRC_COLOR); 
     spriteBatch.begin(); 

     spriteBatch.draw(frameBuffer.getColorBufferTexture(),-1,1,2,-2); 
     spriteBatch.end(); 
    } 

    @Override 
    public void resize(int width, int height) { 

     if(frameBuffer !=null && (frameBuffer.getWidth()!=width || frameBuffer.getHeight()!=height)) { 
      frameBuffer.dispose(); 
      frameBuffer=null; 
     } 

     if(frameBuffer==null){ 
      try { 
       frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false); 
      }catch (GdxRuntimeException e){ 
       frameBuffer=new FrameBuffer(Pixmap.Format.RGB565,width,height,false); 
      } 
     } 
    } 

    @Override 
    public boolean keyDown(int keycode) { 
     return false; 
    } 

    @Override 
    public boolean keyUp(int keycode) { 
     return false; 
    } 

    @Override 
    public boolean keyTyped(char character) { 
     return false; 
    } 

    @Override 
    public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
     return false; 
    } 

    @Override 
    public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
     return false; 
    } 

    @Override 
    public boolean touchDragged(int screenX, int screenY, int pointer) { 

     vector3.set(screenX,screenY,0); 
     camera.unproject(vector3); 
     sprite.setPosition(vector3.x-sprite.getWidth()/2,vector3.y-sprite.getHeight()/2); 

     return false; 
    } 

    @Override 
    public boolean mouseMoved(int screenX, int screenY) { 
     return false; 
    } 

    @Override 
    public boolean scrolled(int amount) { 
     return false; 
    } 
} 

light.png

enter image description here

され、私の予想される出力:

enter image description here

関連する問題