การวาดภาพด้วยฮาร์ดแวร์ที่เร่งความเร็วของรูปทรงโค้ง


11

วิธีการวาดรูปโค้งอย่างรวดเร็ว?

  • โดย "เร็ว" ฉันคิดว่าควรใช้สิ่งอำนวยความสะดวกด้านฮาร์ดแวร์ให้มากที่สุด

  • โดย "โค้ง" ฉันหมายถึงขอบเขตที่กำหนดโดยเส้นโค้งกำลังสองหรือลูกบาศก์ Bezier

  • โดย "รูปร่าง" ฉันหมายถึงจังหวะ "อ้วน" (กว้างมากกว่า 1px) หรือแม้กระทั่งแปลก / ไม่ใช่ศูนย์เต็ม "รูปหลายเหลี่ยมโค้ง 2D" อาจมีรู (เช่นตัวอักษร "O")

ฉันถามเพราะตัวเลือกที่ฉันรู้จักมีข้อบกพร่องหลายประการ:

  • การหารูปทรงสามเหลี่ยมแล้วส่งไปยัง OpenGL - ทำงานได้ยากที่สุดใน CPU และอาจใช้รูปสามเหลี่ยมมากเกินไป / น้อยเกินไป (เช่นสิ้นเปลือง / หยาบ)

  • พื้นผิวแผนที่ - ต้องคำนวณใหม่ / อัปโหลดพื้นผิวในทุกการเปลี่ยนแปลง (รูปร่างระดับการหมุน ... )

  • ฟิลด์ระยะทางที่มีการเซ็น - ขนาดใหญ่รายละเอียดดูไม่สวยหรือต้องคำนวณใหม่ / อัปโหลดพื้นผิว

  • NV_path_rendering - อาจเป็นได้หากไม่ได้ทำงานกับการ์ดของ Nvidia เท่านั้น

  • OpenVG - อาจเป็นได้ถ้ามันไม่ทำงานบนมือถือเท่านั้น

  • ?


* สำหรับฉันแล้ว OpenVG ดูเหมือนจะไม่ก้าวไปข้างหน้าอย่างแน่นอน ไม่มีใครรู้อะไรเกี่ยวกับโอกาสในอนาคตหรือไม่ มันคุ้มค่าหรือเปล่าที่จะจับตาดูในยุคปัจจุบัน?

** OpenGL 4+ นำเสนอวิธีการสอนแบบรูปหลายเหลี่ยมแบบทันที มันสามารถใช้ในการปรับแต่งตาข่ายจากตัวเลือก "triangulating" เพื่อให้ขอบเขตของรูปร่างอย่างน้อยจะไม่ดู "angled" หรือไม่?


2
บทความ Gems GPU นี้ rasterizes เส้นโค้งกำลังสองโดยการระบุชิ้นส่วนของตัวเรือที่โค้งและวิเคราะห์การครอบคลุมใน pixel shader ซึ่งอาจคุ้มค่ากับการดู: developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
yuriks

2
@ yuriks ใช่, Loop & Blinn ลืมไปโดยสิ้นเชิง แต่มันไม่ได้จดสิทธิบัตรเหรอ?
Ecir Hana

ดูยังMassively Parallel-กราฟิกแบบเวกเตอร์ตีพิมพ์ในเอเชีย SIGGRAPH 2014
LHF

ระหว่างตัวเลือกที่คุณระบุไว้ในคำถามของคุณและกระดาษ Loop and Blinn ฉันคิดว่าคุณหมดความเป็นไปได้ทั้งหมดแล้ว
นาธานรีด

คุณสามารถ Tessellate บรรทัดเช่นอธิบายไว้ที่นี่ หรือคุณสามารถหารูปสามเหลี่ยมใน shader คำนวณได้
nikitablack

คำตอบ:


2

คุณสามารถใช้ Shader tessellation OpenGl 4.x เพื่อแปลงจุดควบคุม Bezier เป็นรูปหลายเหลี่ยม

การค้นหา google สำหรับ "tessellation shader bezier" พบว่าร่างนี้อธิบายถึงการ tessellation ของ Bezier พื้นผิวและเส้นโค้ง:

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

นี่เป็นการลดการประเมิน Bezier จาก CPU ไปยัง GPU และลดการไหลของข้อมูลผ่านบัส


3
คุณสามารถปรับปรุงคำตอบนี้ได้โดยอธิบายรายละเอียดเล็กน้อยหรือเพียงแค่ลิงก์ไปยังสิ่งที่อธิบายเพิ่มเติม
นาธานรีด

1
วิธีหนึ่งในการขยายคำตอบนี้คือแก้ไขข้อบกพร่องที่ผู้เขียนกล่าวถึงและอธิบายว่าแนวทางของคุณช่วยได้อย่างไร
trichoplax

0

สามารถวาดภาพโค้งด้วยฮาร์ดแวร์ มีวิธีการอธิบายไว้ในGPU Gems 3ที่อธิบายวิธีการนี้ ผู้ใช้ @ yuriks แสดงความคิดเห็นนี้ จริง ๆ แล้วฉันได้ทำการสาธิตอย่างรวดเร็วเพื่อให้คุณดู

เส้นโค้ง

Image 1 : HW shapen ส่วนโค้งเร่ง (ดึง Usung a Triangle) และแหล่ง webgl

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.