Как нарисовать сферу в D3D11, учитывая положение и радиус? - PullRequest
0 голосов
/ 28 января 2019

Чтобы нарисовать сферу, не нужно знать ничего другого, кроме ее положения и радиуса.Таким образом, рендеринг сферы путем прохождения треугольной сетки звучит очень неэффективно, если вам не нужны цвета для каждой вершины или другие подобные функции.Несмотря на поиск в Google, поиск документации D3D11 и чтение Введение в 3D-программирование с DirectX 11 , я не смог понять

  1. Можно ли нарисовать сферу, передавтолько положение и радиус его от GPU?
  2. Если нет, то какой главный принцип я неправильно понял?
  3. Если да, то как это сделать?

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

Ответы [ 3 ]

0 голосов
/ 28 января 2019

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

0 голосов
/ 29 января 2019

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

Лучшее решение состоит в том, чтобы использовать инстансинг и рендерить множество одинаковых VB / IB сферной геометрии, масштабированных до разныхпозиции и размеры.

0 голосов
/ 28 января 2019

Один из вариантов - использовать тесселяцию.

https://en.wikipedia.org/wiki/Tessellation_(computer_graphics)

Большая часть беспорядка будет создаваться на стороне графического процессора.

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

...