Directx 11 сфер
Я ищу эффективный способ отображения множества сфер с помощью DirectX 11. Сферы определяются (x,y,z,r)
где (x,y,z)
координаты в пространстве и r
это радиус. Я хочу отобразить только те сферы, которые можно увидеть, а это означает, что сферы, которые не находятся в поле зрения, и сферы, которые слишком малы, чтобы их можно было увидеть, не будут нарисованы. Однако, если группа сфер размером менее одного пикселя, по крайней мере, равна одному пикселю, я хочу отобразить наиболее преобладающий цвет. Сферы имеют только один цвет и разные уровни прозрачности. Любая помощь будет оценена и неполные ответы являются приемлемыми.
1 ответ
Вам нужно несколько вещей. Сначала индексированная единичная геометрия сферы, второй буфер для хранения свойств экземпляра сферы (положение, радиус и цвет) и третий небольшой буфер для параметров API, которые еще должны появиться. Эти три объединения объединяются в один 'ID3D11DeviceContext::DrawIndexedInstancedIndirect'
Остается вопрос "как заполнить буфер экземпляра?". Процессор - это просто, просто примените отбраковку усеченного фрагмента, рассортируйте по фронту из-за прозрачности и примените объединение на основе проекции экрана, обновите буфер и используйте 'ID3D11DeviceContext::DrawIndexedInstanced'.
Версия GPU будет делать то же самое с вычислительными шейдерами, но будет сложнее реализовать. Преимущество - нулевая синхронизация cpu / gpu и должна поддерживать гораздо больше экземпляров.