Làm cách nào để thay đổi màu của sprite?


7

Trong trò chơi nhịp điệu của tôi, tôi có một đối tượng ghi chú có thể có màu khác nhau tùy thuộc vào biểu đồ ghi chú. Tôi có thể sử dụng một bảng sprite với tất cả các biến thể màu khác nhau mà tôi sử dụng, nhưng tôi thích sử dụng bảng này hơn. (Mỗi sprite ghi chú được tạo từ các sắc thái khác nhau của màu sắc. Ví dụ: một ghi chú màu đỏ chỉ có màu đỏ, đỏ nhạt và đỏ sẫm.)

Làm thế nào tôi có thể tô màu một sprite một lần nữa?

Tôi đang làm việc với OpenGL, nhưng mọi giải thích về thuật toán hoặc toán học sẽ làm được. :)

Câu trả lời:


8

Tôi có thể sử dụng một hình ảnh màu duy nhất (ví dụ: ghi chú của bạn) với kênh alpha và sau đó tô màu toàn bộ hình ảnh bằng màu cơ bản của bạn. Vì vậy, một cái gì đó giống như trong hình ảnh sau đây ( từ wikidia commons ):

hình ảnh của một nốt nhạc

Nếu màu của bạn là màu đỏ, thì bạn sẽ tô màu ghi chú (tất cả các phần màu đen) với cùng một màu đỏ. Ngoài ra, những gì bạn sẽ cần, là một hình ảnh thang độ xám với bóng của ghi chú. Sau đó, kết hợp đổ bóng với màu phẳng bằng cách sử dụng các chế độ hòa trộn như Multiply và / hoặc Screen .

Một cách tiếp cận khác, có lẽ đơn giản hơn là chỉ cần có một hình ảnh thang độ xám trong đó bạn sẽ nhân từng thành phần màu với màu đã chọn. Vì vậy, nếu bạn có giá trị màu xám 0.5và màu đỏ RGB(1.0, 0.0, 0.0), điều đó sẽ dẫn đến RGB(0.5, 0.0, 0.0)pixel đã cho.

Cập nhật: Đây là một hình ảnh ví dụ để minh họa ý tôi muốn nói với các chế độ hòa trộn:

lớp trộn

Tất nhiên bạn chỉ có thể sử dụng lớp bóng nếu bạn không cần những điểm nổi bật (về cơ bản giống như cách tiếp cận đơn giản hơn đã đề cập ở trên).


2
Điều này quá lạc đề nhưng tôi phải hỏi - làm thế nào bạn tạo ra hình ảnh thứ hai đó?
DMan

@DMan Photoshop cho các hình ảnh ghi chú khác nhau và sau đó là Illustrator để sắp xếp nội dung;)
bummzack

Cảm ơn lời giải thích của bạn. :) Có thể thực hiện pha trộn vào một shader mảnh? Hoặc tốt hơn là ở lại với chức năng pha trộn opengl và hiển thị 3 hình ảnh riêng biệt?
Mr_Qqn

Tôi không phải là chuyên gia về shader, nhưng từ hiểu biết hạn hẹp của mình, tôi nói rằng nó không phải là vấn đề. Ngoài ra, bạn chỉ có thể tính toán trước những hình ảnh bạn cần trên CPU?
bummzack

Vâng, hiện tại tôi sẽ tạo ra một bảng sprite với tất cả các biến thể.
Mr_Qqn

3

Tạo một phiên bản màu xám (hoặc chỉ màu trắng) của hình ảnh bạn muốn hiển thị, với một kênh alpha phù hợp. Sử dụng màu đỉnh để "nhuộm" hình ảnh.

Màu Vertex nhân lên mỗi kênh, vì vậy trắng x đỏ = đỏ, 50% xám x đỏ = 50% đỏ, v.v.


Vấn đề với điều này là bóng sẽ không thể nhận ra khi sử dụng màu sáng (ví dụ màu vàng).
bummzack

Không chắc chắn những gì bạn có ý nghĩa. Màu đen hoặc xám rất đậm trong hình ảnh thang độ xám nhân với màu vàng rất sáng vẫn là màu đen hoặc màu vàng rất đậm.
ggambett

BTW, tôi xin lỗi, tôi đã không thấy "cách tiếp cận có lẽ đơn giản hơn" trong câu trả lời của bạn.
ggambett

1
Bạn nói đúng về nhân. Tôi đã trộn mọi thứ lên. Thiếu cà phê tôi đoán.
bummzack

Cảm ơn câu trả lời của bạn, nhưng khi tôi học opengl 3, tôi thích sử dụng phương pháp khác. :)
Mr_Qqn
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.