Có hai cách, nhưng tôi không biết điều nào có ý nghĩa nhất đối với ứng dụng của bạn. Ở cấp độ rất cao:
Ánh xạ họa tiết đến hình tam giác. Khi gradient rất mượt mà, nó không cần độ phân giải rất cao và bạn có thể cho phép lọc tuyến tính thực hiện công việc cho bạn.
Sử dụng trình đổ bóng. Nhiều công việc hơn để thiết lập, nhưng cũng linh hoạt hơn và mang đến cho bạn kết quả 'hoàn hảo' ở mọi tỷ lệ/độ phân giải.
Update: nếu bạn đang sử dụng một Shader, ý tưởng là như sau.
Vượt qua một varying vec2 coords
từ trình đổ bóng đỉnh đến trình đổ bóng phân đoạn. Đặt giá trị cho điểm 1 thành 0,0
, cho điểm 2 đến 1,0
và cho điểm C đến 0,1
. Để nhận các giá trị này vào bóng đổ đỉnh, hãy sử dụng attribute
. Các giá trị thay đổi sẽ được nội suy xuyên qua tam giác, giống như tọa độ kết cấu và màu sắc. Vì vậy, các biến coords
được ánh xạ tới tam giác của bạn như thế này:
y
1 +-----+
|\ |
|#\ |
|##\ |
|###\ |
|####\|
0 +-----+ x
0 1
Các shader đoạn nhận một giá trị coords
đâu đó trong khu vực băm. Để tìm ra số lượng của từng màu bạn cần pha trộn, hãy tính toán đường thẳng qua coords
và 0,1
và tìm giao điểm của nó với trục x
. Nhờ hệ tọa độ của coords
, đây là thao tác đơn giản: chỉ cần chia coords.x
theo coords.y
. Gọi số này f
. (Lưu ý rằng điều này sẽ cung cấp cho phép chia cho không tại điểm C, nhưng điều này được dự kiến như bạn không bao giờ được xác định màu sắc đó. Bạn có thể kiểm tra cho rằng rõ ràng trong shader nếu bạn muốn).
Indicating coords
với c
và đại diện cho phù hợp với .
ký tự, f
kết thúc ở đâu đó giữa 0 và 1:
y
1 +-----+
|\ |
|.\ |
|#c\ |
|#.#\ |
|##.#\|
0 +--f--+ x
0 1
Bây giờ giả sử bạn có uniform vec4 colour1
và uniform vec4 colour2
để xác định màu sắc tại điểm 1 và 2, tương ứng.Sau đó, một vấn đề đơn giản là pha trộn các phần này: lấy một phần của các phần colour2
và 1-f
của colour1
và thêm chúng lại với nhau. Hàm GLSL mix
thực hiện chính xác điều này.
Vì hình tam giác sẽ thay đổi động, dường như tùy chọn đầu tiên có thể không phù hợp. Đối với các trình đổ bóng, tôi có nên sử dụng trình đổ bóng đỉnh để chuyển một giá trị khác nhau đến đỉnh phân đoạn không? Tôi đã chỉ sử dụng đổ bóng đỉnh cho đến nay, và sau khi tìm kiếm một số hướng dẫn tôi vẫn không thể tìm ra cách vượt qua các giá trị khác nhau từ các công cụ đổ bóng đỉnh. – Leo
Nó vẫn có thể: kết cấu sẽ kéo dài cùng với hình học của bạn. – Thomas
Xin lỗi vì đã chỉnh sửa nhanh. Không nhận ra nhấn enter sẽ tải lên nhận xét. – Leo