Как нарисовать сферу в D3D11, учитывая положение и радиус?

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

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

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


person Antti_M    schedule 28.01.2019    source источник
comment
В 1980-х при написании игр на машинном коде Z80 можно было рисовать круги, не извлекая квадратный корень и не используя какие-либо тригонометрические функции. Последние по-прежнему дороги на современных компьютерах. Интересно, сохраняются ли оптимизации, которым уже 40 лет?   -  person Bathsheba    schedule 28.01.2019
comment
Я думаю, вы недооцениваете, насколько быстро графические процессоры рисуют треугольники. Они не тратят аппаратное обеспечение на возможность рисовать примитивные формы, такие как сферы, потому что в этом нет необходимости.   -  person Tharwen    schedule 28.01.2019


Ответы (3)


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

person user7860670    schedule 28.01.2019
comment
Может быть, не для вершинного шейдера, потому что он предшествует геометрическому шейдеру в конвейере рендеринга? - person Antti_M; 28.01.2019

Одним из вариантов было бы использование тесселяции.

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

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

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

person Victor Padureanu    schedule 28.01.2019
comment
Вы уверены, что нельзя пройти всего одну вершину и нарисовать из нее сферу? Как одна огромная частица. - person Antti_M; 28.01.2019

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

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

person Chuck Walbourn    schedule 28.01.2019