Сферы Directx 11

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


person Community    schedule 15.12.2013    source источник


Ответы (1)


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

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

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

person galop1n    schedule 20.12.2013