Малюнок прискореного обладнанням прискорених фігур


11

Як швидко намалювати вигнуту форму?

  • "швидко" Я припускаю, що слід використовувати апаратні засоби якомога більше

  • "вигнуті" я маю на увазі межі, визначені квадратичними або кубічними кривими Безьє

  • Під "формою" я маю на увазі або "жирний" штрих (тобто більше 1 пікселя в ширину), або парний "2D вигнутий багатокутник", заповнений парним / ненульовим значенням, можливо, з отворами (тобто літера "O")

Я запитую, тому що варіанти, які я знаю, мають кілька недоліків:

  • тріангулювання форми та надсилання її до OpenGL - робить найскладнішою роботою процесора та може використовувати занадто багато / мало трикутників (тобто марно / грубо)

  • текстурний атлас - має перераховувати / завантажувати текстуру при кожній зміні (форма, масштаб, обертання, ...)

  • Підписане поле відстані - на великих масштабах деталі не виглядають симпатичними або повинні перераховувати / завантажувати текстуру

  • NV_path_rendering - це могло б бути, якби він працював не лише на картках Nvidia

  • OpenVG - це може бути, якби він працював не лише на мобільному

  • ?


* Мені здається, що OpenVG не зовсім рухається вперед, м'яко кажучи. Хтось знає щось про її майбутні перспективи? Чи варто взагалі слідкувати за сьогоднішнім днем?

** OpenGL 4+ забезпечує засоби польової тесселяції полігонів. Чи можна якось використовувати для вдосконалення сітки з варіанту "триангуляції", щоб межа форми хоча б не виглядала "під кутом"?


2
Ця стаття про GPU Gems розкриває квадратичні криві шляхом визначення частин корпусу, які вигнуті та аналітично обчислюють покриття в піксельній шейдері, можливо, варто переглянути: developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
юрікс

2
@yuriks Так, Loop & Blinn, повністю забули про це. Але хіба це не запатентовано?
Ecir Hana


Між варіантами, які ви перерахували у своєму запитанні, і документом Loop та Blinn, я думаю, ви майже вичерпали всі можливості.
Натан Рід

Ви можете розшифрувати лінію, як описано тут . Або ви можете тріангулювати в обчислювальній шейдері.
nikitablack

Відповіді:


2

Ви можете використовувати тенселяційні шейдери OpenGl 4.x для перетворення контрольних точок Безьє в полігони.

Пошук Google для "тізеляційного шейдера Безьє" знайшов цей контур, що описує тесселяцію поверхонь та кривих Безьє:

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

Це вивантажує оцінку Bezier з процесора на GPU і зменшує потік даних по шині.


3
Ви можете вдосконалити цю відповідь, детально розробивши або навіть посилаючись на щось, що пояснює далі.
Натан Рід

1
Одним із способів розширити цю відповідь було б усунути недоліки, про які згадує автор, та пояснити, як ваш підхід допомагає їм.
трихоплакс

0

Можна зробити вигнутий малюнок за допомогою апаратних засобів. Існує метод, описаний в GPU Gems 3, який описує, як це зробити. Користувач @yuriks це фактично коментує. Я фактично зробив для вас швидку брудну демонстрацію, щоб подивитися.

крива

Зображення 1 : Форма кривої прискореної HW (намальована у трикутнику) та джерело webgl

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.