Gambar bentuk melengkung yang dipercepat perangkat keras

11

Bagaimana cara menggambar bentuk melengkung dengan cepat?

  • dengan "cepat" saya kira kita harus menggunakan fasilitas perangkat keras sebanyak mungkin

  • oleh "melengkung" Maksudku batas yang didefinisikan oleh kurva Bezier kuadratik atau kubik

  • dengan "bentuk" yang saya maksud adalah stroke "gemuk" (yaitu lebih dari 1px lebar) atau bahkan "ganjil kurva 2D" yang tidak aneh / tidak nol, mungkin dengan lubang (yaitu huruf "O")

Saya bertanya karena opsi yang saya tahu memiliki beberapa kelemahan:

  • triangulasi bentuk dan mengirimkannya ke OpenGL - melakukan pekerjaan yang paling sulit pada CPU dan mungkin menggunakan terlalu banyak / beberapa segitiga (yaitu boros / kasar)

  • tekstur atlas - harus menghitung ulang / mengunggah tekstur pada setiap perubahan (bentuk, skala, rotasi, ...)

  • Bidang jarak yang ditandatangani - pada skala besar detail tidak terlihat cantik atau harus menghitung ulang / mengunggah tekstur

  • NV_path_rendering - bisa jadi itu, jika tidak hanya bekerja pada kartu Nvidia

  • OpenVG - bisa jadi itu, jika itu tidak berfungsi hanya pada ponsel

  • ?


* Menurut saya OpenVG tidak persis bergerak maju, lebih tepatnya. Adakah yang tahu tentang prospek masa depannya? Apakah ada gunanya mengawasi pada hari ini?

** OpenGL 4+ menyediakan sarana tessellation poligon saat terbang. Bisakah itu entah bagaimana digunakan untuk memperbaiki mesh dari opsi "triangulasi" sehingga batas bentuk setidaknya tidak akan terlihat "miring"?

Ecir Hana
sumber
2
Artikel Permata GPU ini merasterisasi kurva kuadratik dengan mengidentifikasi bagian lambung yang melengkung dan secara analitis menghitung cakupan dalam pixel shader, mungkin patut dilihat: developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
yuriks
2
@yuriks Ya, Loop & Blinn, benar-benar lupa. Tapi bukankah sudah dipatenkan?
Ecir Hana
Lihat juga Grafik Vektor Besar-Paralel , yang diterbitkan di SIGGRAPH Asia 2014.
lhf
Di antara opsi yang Anda daftarkan dalam pertanyaan Anda dan kertas Loop dan Blinn, saya pikir Anda sudah cukup banyak menghabiskan semua kemungkinan.
Nathan Reed
Anda dapat menandai garis, seperti dijelaskan di sini . Atau Anda dapat melakukan triangulasi dalam penghitung bayangan.
nikitablack

Jawaban:

2

Anda dapat menggunakan OpenGl 4.x tessellation shaders untuk mengubah titik kontrol Bezier menjadi poligon.

Pencarian google untuk "tessellation shader bezier" menemukan garis besar ini yang menggambarkan tessellation dari permukaan dan kurva Bezier:

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

Ini mengeluarkan evaluasi Bezier dari CPU ke GPU dan mengurangi aliran data melintasi bus.

atb
sumber
3
Anda dapat meningkatkan jawaban ini dengan sedikit menguraikan, atau bahkan hanya menautkan ke sesuatu yang menjelaskan lebih lanjut.
Nathan Reed
1
Salah satu cara memperluas jawaban ini adalah dengan mengatasi kelemahan yang disebutkan oleh penulis, dan menjelaskan bagaimana pendekatan Anda membantu mereka.
trichoplax
0

Seseorang dapat melakukan menggambar melengkung dengan perangkat keras. Ada metode yang dijelaskan dalam GPU Permata 3 yang menjelaskan cara melakukan ini. Pengguna @yuriks sebenarnya mengomentari ini. Sebenarnya saya telah membuat demo cepat yang kotor untuk Anda lihat.

melengkung

Gambar 1 : HW kurva kurva dipercepat (digambar usung segitiga) dan sumber webgl

joojaa
sumber