Bản vẽ tăng tốc phần cứng của các hình dạng cong


11

Làm thế nào để nhanh chóng vẽ một hình dạng cong?

  • bằng cách "nhanh chóng" tôi cho rằng một người nên sử dụng các thiết bị phần cứng càng nhiều càng tốt

  • bởi "cong" Tôi có nghĩa là các ranh giới được xác định bởi các đường cong Bezier bậc hai hoặc khối

  • bằng "hình dạng" Tôi có nghĩa là một nét vẽ "béo" (nghĩa là rộng hơn 1px) hoặc "đa giác cong 2D" chẵn / lẻ / không lấp đầy, có thể có lỗ (ví dụ: chữ "O")

Tôi đang hỏi bởi vì các tùy chọn mà tôi biết có một số nhược điểm:

  • tam giác hình dạng và gửi nó tới OpenGL - thực hiện công việc khó khăn nhất trên CPU và có thể sử dụng quá nhiều / vài tam giác (nghĩa là lãng phí / thô)

  • tập bản đồ kết cấu - phải tính toán lại / tải lên kết cấu trên mỗi thay đổi (hình dạng, tỷ lệ, xoay, ...)

  • Trường khoảng cách đã ký - trên quy mô lớn, các chi tiết trông không đẹp hoặc phải tính toán lại / tải lên kết cấu

  • NV_path_Vndering - có thể là nó, nếu nó không chỉ hoạt động trên thẻ của Nvidia

  • OpenVG - có thể là nó, nếu nó không chỉ hoạt động trên thiết bị di động

  • ?


* Dường như với tôi rằng OpenVG không thực sự tiến về phía trước, để nói một cách nhẹ nhàng. Có ai biết bất cứ điều gì về triển vọng tương lai của nó? Có đáng để giữ một mắt trong ngày hôm nay?

** OpenGL 4+ cung cấp phương tiện xử lý đa giác khi đang bay. Nó có thể được sử dụng bằng cách nào đó để tinh chỉnh lưới từ tùy chọn "tam giác" sao cho ranh giới hình dạng ít nhất sẽ không trông "góc cạnh"?


2
Điều GPU Gems này rasterizes đường cong bậc hai bằng cách xác định các bộ phận của thân tàu được cong và phân tích tính toán bảo hiểm trong pixel shader, có thể là đáng xem: developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
yuriks

2
@yuriks Vâng, Loop & Blinn, hoàn toàn quên nó. Nhưng nó không được cấp bằng sáng chế?
Ecir Hana

Xem thêm Đồ họa véc-tơ song song , được xuất bản trong SIGGRAPH Châu Á 2014.
lhf

Giữa các tùy chọn bạn đã liệt kê trong câu hỏi của bạn và bài báo Loop và Blinn, tôi nghĩ rằng bạn đã sử dụng hết tất cả các khả năng.
Nathan Reed

Bạn có thể chia nhỏ một dòng, như được mô tả ở đây . Hoặc bạn có thể tam giác trong một shader tính toán.
nikitablack

Câu trả lời:


2

Bạn có thể sử dụng các shader tessname OpenGl 4.x để chuyển đổi các điểm kiểm soát Bezier thành đa giác.

Một tìm kiếm google cho "tessname shader bezier" đã tìm thấy phác thảo này mô tả sự sắp xếp của các bề mặt và đường cong Bezier:

http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessname.1pp.pdf

Việc này giảm tải đánh giá Bezier từ CPU sang GPU và giảm luồng dữ liệu trên xe buýt.


3
Bạn có thể cải thiện câu trả lời này bằng cách xây dựng một chút, hoặc thậm chí chỉ cần liên kết với một cái gì đó giải thích thêm.
Nathan Reed

1
Một cách để mở rộng câu trả lời này sẽ là giải quyết những hạn chế mà tác giả đề cập và giải thích cách tiếp cận của bạn giúp với những điều đó.
trichoplax

0

Người ta có thể vẽ cong với phần cứng. Có một phương pháp được mô tả trong GPU Gems 3 mô tả cách thực hiện việc này. Người dùng @yuriks thực sự bình luận điều này. Tôi thực sự đã làm một bản demo nhanh để bạn xem qua.

đường cong

Hình 1 : Shapen đường cong tăng tốc CTNH (vẽ hình tam giác) và nguồn webgl

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.