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"?
sumber
Jawaban:
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.
sumber
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.
Gambar 1 : HW kurva kurva dipercepat (digambar usung segitiga) dan sumber webgl
sumber