Directx 11 сфер

Я ищу эффективный способ отображения множества сфер с помощью DirectX 11. Сферы определяются (x,y,z,r) где (x,y,z) координаты в пространстве и r это радиус. Я хочу отобразить только те сферы, которые можно увидеть, а это означает, что сферы, которые не находятся в поле зрения, и сферы, которые слишком малы, чтобы их можно было увидеть, не будут нарисованы. Однако, если группа сфер размером менее одного пикселя, по крайней мере, равна одному пикселю, я хочу отобразить наиболее преобладающий цвет. Сферы имеют только один цвет и разные уровни прозрачности. Любая помощь будет оценена и неполные ответы являются приемлемыми.

1 ответ

Решение

Вам нужно несколько вещей. Сначала индексированная единичная геометрия сферы, второй буфер для хранения свойств экземпляра сферы (положение, радиус и цвет) и третий небольшой буфер для параметров API, которые еще должны появиться. Эти три объединения объединяются в один 'ID3D11DeviceContext::DrawIndexedInstancedIndirect'

Остается вопрос "как заполнить буфер экземпляра?". Процессор - это просто, просто примените отбраковку усеченного фрагмента, рассортируйте по фронту из-за прозрачности и примените объединение на основе проекции экрана, обновите буфер и используйте 'ID3D11DeviceContext::DrawIndexedInstanced'.

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

Другие вопросы по тегам