Рисование миллионов сегментов на экране - PullRequest
1 голос
/ 25 января 2011

Я хотел бы нарисовать миллионы отрезков на экране.Большую часть времени пользователь будет видеть только определенную область «вселенной», но у него должна быть возможность «уменьшить масштаб», чтобы увидеть все отрезки линии одновременно.

Насколько я понимаю, примитив является «треугольник ", поэтому мне придется выразить мои отрезки в виде треугольников.Миллионы треугольников.

Является ли XNA подходящим инструментом для этой работы или он будет слишком медленным?

Дополнительная информация:

  1. Это не для игры, но для программы моделирования некоторых процессов.
  2. Мне все равно, какой язык использовать (мне рекомендована XNA)

PS: Пожалуйста, дайте мне знать, если вам нужны дополнительныеподробно.

Ответы [ 4 ]

0 голосов
/ 25 января 2011

Насколько я понимаю, примитив - это "треугольник", поэтому мне придется выражать свои отрезки в виде треугольников.Миллионы треугольников.

Неправильно, XNA может идеально нарисовать линии для вас следующим образом:

GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.LineList, vertexOffset, 0, numVertices, startIndex, primitiveCount);

(Или PrimitiveType.LineStrip, если конечная вершина line1 является начальнойвершина линии 2).

Является ли XNA подходящим инструментом для этой работы или он будет слишком медленным?

XNA - это "инструмент", и если выРисуя много линий, это определенно будет быстрее, чем GDI +, и его легко реализовать, чем C ++, в сочетании с Unmannaged D3D.Рисование линии - очень дешевая операция.Я бы посоветовал вам просто установить XNA и сделать быстрый прототип, чтобы увидеть, сколько линий вы можете нарисовать одновременно.(Я думаю, по крайней мере, 1 миллион).Затем посмотрите, действительно ли вам нужно использовать продвинутые методы, описанные другими авторами.

Также метод «Упрощение полилиний», предложенный Феличе Поллано, не работает для отдельных линий, только для моделей, составленных из треугольников (Вы можете обменять множество маленьких треугольников на несколько больших один раз, чтобы повысить производительность, но при этом уменьшить визуальные эффекты, если вы уменьшите масштабность, то далеко никто не заметит) Это также не будет работать для «утолщенных линий», потому что они всегда состоят из2 треугольника.(Если только вы не разрешите согнутые линии).

0 голосов
/ 25 января 2011

У этого парня была та же проблема, и это может помочь ( здесь - источники).

0 голосов
/ 25 января 2011

Да, как намекает Феличе, упрощение набора задач - это название игры.Существуют очевидные ограничения для аппаратного обеспечения и алгоритмов, поэтому единственный способ нарисовать «больше материала» - это на самом деле нарисовать «меньше материала».

Вы можете использовать такие приемы, как разделение сцены на OctTree , так что вы можете сделать Просмотр Frustrum Culling .Существует множество методов для масштабирования того, что вы рисуете.Одним из моих любимых способов является использование самозванцев для создания составной сцены, которую легче рисовать.Вот статья, в которой объясняется техника: http://academic.research.microsoft.com/Paper/1241430.aspx

Самозванцы - это основанные на изображениях примитивы , обычно используемые для замены сложных * геометрии * для уменьшения времени рендеринга, необходимого для отображения сложных сцен.Однако большой проблемой является огромный объем памяти, необходимый для самозванцев.В этой статье представлен алгоритм, который автоматически помещает самозванцев в сцену, так что всегда достигается желаемое качество изображения с частотой кадров, в то же время не требуя огромных объемов памяти самозванца.Низкие требования к памяти обеспечиваются новым методом размещения и одновременным использованием других методов ускорения, таких как выборка видимости и геометрические уровни детализации .

0 голосов
/ 25 января 2011

При увеличении детализации простой ограничивающий прямоугольник проверяет, виден ли треугольник, чтобы избежать рисования невидимых объектов.Когда пользователь масштабирует все, вы должны применить некоторый алгоритм упрощения ломаной линии http://www.softsurfer.com/Archive/algorithm_0205/algorithm_0205.htm, чтобы избежать слишком большого количества вещей для рисования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...