2010-11-02 14 views
9

Tôi có một ứng dụng vẽ nhỏ dựa trên mã mẫu GLPaint. Nó hoạt động tốt. Vấn đề của tôi là tôi cần phải thực hiện "cọ vẽ" để xóa các họa tiết đã được vẽ.Trộn kết cấu để xóa các giá trị alpha nhẹ nhàng bằng OpenGL

Mục tiêu của tôi là có một cục tẩy có cạnh mềm. Ngay bây giờ tôi chỉ cần lấy kết cấu tương tự mà tôi sử dụng để vẽ nhưng chuyển sang chức năng pha trộn từ

glBlendFunc(GL_SRC_ALPHA, GL_ONE); 

để

glBlendFunc(GL_ZERO, GL_ZERO); 

Kết quả là một cục tẩy hình chữ nhật vuông. Đó là ok nhưng nó không phải là những gì tôi thực sự muốn. Tôi cần các cạnh mềm. Tôi muốn tạo một cục tẩy tròn không phải là hình chữ nhật hình vuông.

Bạn có đoán được cách đạt được điều đó không? Hoặc bạn có biết liệu có cách nào để tạo chức năng trộn tùy chỉnh của riêng tôi không?

+0

Tôi nghĩ rằng bạn muốn một cái gì đó như thế này: http://stackoverflow.com/questions/10373847/producing-eraser-effects-using-libgdx-and -opengl-es thực sự là vấn đề của riêng tôi và tôi vẫn bị mắc kẹt về cách đạt được điều này. – Rafay

Trả lời

11

Bạn có biết màu nền của kết cấu không? Nếu vậy, thay vì "xóa", bạn có thể chỉ cần vẽ nền trên nó. Điều đó sẽ có phần đơn giản hơn, vì bạn sẽ chỉ thay đổi màu sắc chứ không phải là mod trộn.

Nếu bạn cần phải làm điều đó với pha trộn, hãy thử:

glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 

này sẽ sử dụng số không trong khu vực của alpha đầy đủ, và hiển thị trở lại màu sắc hiện có như alpha của bàn chải mất dần đi.

Trang này chứa một danh sách đầy đủ các chế độ có thể: http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml

+0

Nền là hình ảnh, vì vậy tôi không thể vẽ lên nó. Bạn có giải pháp nào khác không? –

+0

Chức năng trộn mà tôi đề xuất là đáng thử, nếu có. Nếu GL_ZERO/GL_ZERO hoạt động, thì sử dụng zero và alpha nghịch đảo cũng như vậy. – ssube

+0

Tôi thử hàm glBlendFunc (GL_ZERO, GL_ONE_MINUS_SRC_ALPHA), nhưng nó thậm chí không thể xóa. –