Программирование собственной растеризации треугольника для OpenGL?

Я пытаюсь сделать закругленные треугольники для повышения производительности. Чтобы проиллюстрировать, что я имею в виду, см. Рисунок ниже:

введите описание изображения здесь

Я пробовал в процессоре, теперь есть ли способ как-то переместить этот алгоритм в графический процессор? Я могу изменить код метода, который вызывает фрагментный шейдер?

Кстати, если я смогу это сделать, то на каком языке программирования мне нужно сделать это заново?

Я использую графический процессор OpenGL 2.1 с пропускной способностью памяти всего 20–30 ГБ.

0

Решение

Читать газету Независимая от разрешения визуализация кривой с использованием программируемого графического оборудования Чарльз Луп и Джим Блинн.

Короткая версия: если у вас есть эффективный внутренний / внешний тест для вашей кривой, визуализируйте форму окружающего корпуса как треугольник (-ы), используйте фрагментный шейдер, чтобы отбросить пиксели за пределами кривой.

Во-вторых, забота Aeluned о том, что передача алгоритма на GPU не сделает его быстрее.

1

Другие решения

Я не уверен точно, что ты задумал, но это кажется немного сомнительным. В действительности вы можете нанести ущерб производительности, пытаясь выполнить некоторые из этих пользовательских вычислений в шейдере, чтобы отобразить круг или эллипс.

Современное графическое оборудование может выдвигать миллиарды треугольников в секунду. Вы, вероятно, раскалываете волосы здесь.

В любом случае, если вы хотите «подделать» геометрию, это может вас заинтересовать: https://alfonse.bitbucket.io/oldtut/Illumination/Tutorial%2013.html

1

  1. На OpenGL 2.1 у вас нет геометрических шейдеров (3.2+), поэтому вы можете забыть о GPU.
  2. Вы не можете улучшить растеризацию выпуклых форм своими изогнутыми треугольниками
    • сложность растеризации любого выпуклого многоугольника такая же, как и у любого треугольника той же области
    • разница только в:
    • количество проходящих вершин
      • передача памяти
      • с геометрическим шейдером это будет лучше с использованием ваших треугольников
    • количество граничных линий
      • растеризация границ для заполнения
      • будет хуже с использованием ваших треугольников
      • (нужно соединить больше треугольников вместо одного многоугольника)

Так что не стоит реализовывать это для лучшей производительности в вашем случае.

Единственное, для чего я могу использовать это, — это облегчить ручное создание форм.

В этом случае просто напишите функцию glRoundedTriangle (….)

  • которые генерируют правильные вершины, цвета, нормали, координаты текстуры из заданных входных параметров.

как это выглядело бы неизвестно, потому что вы не указали геометрию / форму округлого треугольника и / или входные параметры (например, 3 точки + 3 радиуса кривой со знаком?)

Для повышения производительности в OpenGL используйте VBO / VAO

0
По вопросам рекламы [email protected]