Cách đảo ngược màu nền của pixel


10

Tôi đang viết một trình soạn thảo trò chơi và bản đồ bằng Java và jMonkeyEngine. Trong trình chỉnh sửa bản đồ, tôi đã có một bàn chải được thực hiện bởi hình cầu có dây. Vấn đề của tôi là: Tôi muốn làm cho nó hiển thị ở mọi nơi, vì vậy tôi muốn đảo ngược màu của pixel "phía sau" cọ này. Tôi muốn làm điều đó với shader mảnh (GLSL), nhưng tôi không biết làm thế nào để có được màu của pixel này.


Có jMonkeyEngine hỗ trợ hiệu ứng sau quá trình? Có lẽ bạn sẽ phải đi theo con đường này.
sam hocevar

Vâng, jMonkeyEngine hỗ trợ các hiệu ứng sau quá trình, nhưng tôi không quá quen thuộc với chúng tại thời điểm này. Cảm ơn đề nghị.
m4tx

Mmmh, nevermind, có những cách đơn giản hơn. Tôi sẽ cố gắng trả lời đúng.
sam hocevar

Bạn có thể sử dụng glLogicOp (GL_XOR) không? opengl.org/sdk/docs/man/xhtml/glLogicOp.xml
Adam

1
Lưu ý rằng đảo ngược không đảm bảo cho bạn khả năng hiển thị trong một loạt các trường hợp góc, như màu xám chưa bão hòa và cung cấp khả năng hiển thị kém cho nhiều trường hợp khác.
Lars Viklund

Câu trả lời:


15

Cách nhanh chóng và dễ dàng để làm điều này là sử dụng phương trình trộn chuẩn với các tham số sau:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);

Nếu srclà màu nguồn (màu từ đối tượng mới của bạn) và dstlà màu đích (màu nằm trong bộ đệm khung), nó sẽ tính màu mới như sau:

new = src * (1 - dst) + dst * 0
    = src * (1 - dst)

Vì vậy, bạn chỉ cần thiết lập src = 1, tức là. trắng, và bạn sẽ nhận được video nghịch đảo. Trình đổ bóng mảnh GLSL sẽ là:

void main(void) {
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

4
Âm thanh như bạn biết pha trộn alpha của bạn!
bobobobo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.