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