Tôi có một số đa giác đơn giản (ít hơn 20 đỉnh) vẽ phẳng trên mặt phẳng xy đơn giản, sử dụng GL_TRIANGLES và màu phẳng, mô phỏng 2d.Vẽ một đường viền trên đa giác 2d với bóng đổ phân đoạn
Tôi muốn thêm đường viền có độ dày biến đổi và màu khác với các đa giác này. Tôi có một cái gì đó thực hiện bằng cách sử dụng cùng một đỉnh và glLineWidth/GL_LINE_LOOP, mà làm việc, nhưng là một vượt qua rendering và lặp đi lặp lại tất cả các biến đổi đỉnh. Tôi nghĩ rằng tôi sẽ có thể làm điều này trong shader mảnh bằng cách sử dụng gl_FragCoord và dữ liệu đỉnh và/hoặc tọa độ kết cấu, nhưng tôi không chắc chắn, và những nỗ lực ngây thơ của tôi rõ ràng là không chính xác.
Tôi hình dung một cái gì đó như sau.
uniform vec2 scale; // viewport h/w
uniform float line_width;
uniform vec4 fill_color;
uniform vec4 border_color;
varying vec4 vertex; // in world coords
void main()
{
if (distance_from_edge(gl_FragCoord, vertex, scale) < line_width)
{
// we're close to the edge the polygon, so we're the border.
gl_FragColor = border_color;
}
else
{
gl_FragColor = fill_color;
}
}
Phần tôi đang cố gắng tìm ra là hàm distance_from_edge - làm cách nào để tính được? Đang sử dụng gl_FragCoord cách tiếp cận sai - tôi có nên sử dụng một số loại ánh xạ kết cấu không? Là một thử nghiệm, tôi đã thử chuyển đổi đỉnh sang không gian pixel với tỷ lệ và sau đó tính khoảng cách giữa giá trị đó và gl_FragCoord theo pixel, nhưng điều đó cho kết quả lạ mà tôi không thực sự hiểu. Ngoài ra, tôi cần khoảng cách đến cạnh , không phải là đỉnh, nhưng tôi không chắc chắn cách thực hiện điều đó.
Bất kỳ ý tưởng nào?
EDIT: dựa trên phản ứng Nicol của, câu hỏi của tôi trở thành:
Giả sử tôi có một hình tam giác với đỉnh 3 góc đánh dấu là đỉnh cạnh, và một đỉnh ở giữa được đánh dấu là không cạnh (để diễn tả với 3 hình tam giác trong tổng cộng), sau đó làm cách nào để nội suy trong trình đổ bóng phân đoạn để vẽ một đường viền có độ dày nhất định? Tôi giả sử tôi chuyển cờ cạnh cho trình đổ bóng, cũng như độ dày đường mong muốn, và tính toán nội suy để tìm ra khoảng cách giữa cạnh và không cạnh đỉnh, và các ngưỡng màu như viền/tô khi thích hợp ?
'gl_FragCoord' sẽ là ồ ạt vô ích cho bạn. Điều đó chỉ cho bạn biết mảnh vỡ nằm trên màn hình; nó không nói gì về nơi mảnh vỡ liên quan đến tam giác. Vị trí đỉnh sẽ tương tự không được trợ giúp. Bạn sẽ cần sự trợ giúp của dữ liệu đổ bóng/dữ liệu do người dùng cung cấp, đặt giá trị trên các đỉnh dựa trên đó có phải là đỉnh cạnh hay không và nội suy giá trị. Điều đó có nghĩa là bạn không thể phát hiện ra cạnh của một tam giác đơn; bạn phải chia tam giác thành nhiều hình tam giác, sao cho các đỉnh bên trong và đỉnh cạnh có thể được phân biệt. –
Cảm ơn, tôi nghi ngờ tôi đã bỏ lỡ điều gì đó. Vì vậy, nếu tôi có một tam giác với 3 đỉnh được đánh dấu là đỉnh cạnh, và một ở giữa không phải là (do đó kết xuất với 4 hình tam giác), sau đó làm thế nào để tôi nội suy cho một chiều rộng dòng nhất định cho biên giới? – bloodearnest