2015-11-10 22 views
7

Tôi đang cố gắng che một hình nền nhỏ hơn mặt nạ. và khoảng cách giữa nền và mặt nạ xuất hiện màu đen.Hình ảnh mặt nạ có chứa alpha làm cho mặt nạ bên trong màu đen

mask and background

enter image description here

Đây là mã Tôi đang sử dụng:

 batch.end(); 
    batch.begin();  
    Gdx.gl20.glColorMask(false, false, false, true); 
    batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ZERO); 
    batch.draw(mask, getX(), getY()); 
    batch.flush(); 
    Gdx.gl20.glColorMask(true, true, true, true);  
    batch.setBlendFunction(GL20.GL_DST_ALPHA, GL20.GL_ONE_MINUS_DST_ALPHA);   
    batch.draw(texture, getX(), getY());  
    batch.flush(); 
    batch.setBlendFunction(GL20.GL_SRC_ALPHA,GL20.GL_ONE_MINUS_SRC_ALPHA); 
    batch.end(); 
    batch.begin(); 

tôi đã cố gắng tất cả các loại kết hợp chức năng mà không cần bất kỳ sự thành công. có lẽ tôi đang thiếu một cái gì đó.

Cập nhật

Gắn biểu đồ mà tôi xây dựng của tất cả các khả năng kết quả (có liên quan) của src và dst trộn chức năng. May mắn là không có điều nào dưới đây có hiệu quả, và như tôi đoán có điều gì đó cần phải được thực hiện để đạt được kết quả.

 Gdx.gl20.glColorMask(true, true, true, true);  
    batch.setBlendFunction(src_func, dst_func);   
    batch.draw(texture, getX(), getY());  

enter image description here

+1

Đây là câu hỏi rất chi tiết và mang tính thông tin. – Programmer

Trả lời

3

Giải quyết nó bằng cách sử dụng FrameBuffer.

batch.end(); 
    spriteBatch.begin(); 
     buffer.begin(); 
      Gdx.gl20.glColorMask(false, false, false, true); 
      spriteBatch.setBlendFunction(GL20.GL_ONE, GL20.GL_ZERO); 
      spriteBatch.draw(mask, 0,0); 
      Gdx.gl20.glColorMask(true, true, true, true); 
      spriteBatch.setBlendFunction(GL20.GL_DST_ALPHA, GL20.GL_ZERO); 
      spriteBatch.draw(texture, 0,0); 
      spriteBatch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); 
     buffer.end(); 
    spriteBatch.end();  
    batch.begin(); 
    batch.draw(buffer.getColorBufferTexture(), getX(), getY()); 
0

Chỉ cần dùng một cái nhìn tại hình ảnh của bạn, nó trông giống như:

  • Các alpha của mặt nạ là kiểm soát hoàn toàn của alpha đầu ra
  • Bạn muốn alpha ảnh nền cũng được đưa vào tài khoản

Trong các từ khác, bạn chỉ muốn alpha nơi cả hai hình ảnh có alpha.


Tôi chưa thể xem xét nhiều chức năng trộn và cách chúng hoạt động và có thể cập nhật thêm chi tiết về cách đạt được mục tiêu của bạn. đang cố gắng hoàn thành sẽ giúp bạn tìm ra trước khi tôi bắt đầu.

How to do blending in LibGDX - câu hỏi này có vẻ thú vị, kết hợp hình ảnh nguồn và đích trong lưới để hiển thị hiệu ứng.

+0

Xin chào, Cảm ơn bạn đã trả lời. Tôi biết những gì tôi đang cố gắng để hoàn thành tôi không biết làm thế nào để làm điều đó. tôi nghĩ rằng tôi đã thử tất cả các chức năng trộn có thể. vì vậy tôi đoán có cái gì đó hơn là cần phải được thực hiện. trong liên kết bạn đăng ngay cả khi nó được trả lời, nó là một kịch bản khác. như bạn đã chỉ định. – Rami

Các vấn đề liên quan