Для справки: я работаю над проектом на C ++, в котором я пытаюсь рисовать трехмерные представления объектов на основе данных профиля в реальном времени.Данные профилирования собираются с внешнего оборудования профилирования.Система движется вдоль объекта и с частотой 300 раз в секунду предоставляет моему программному обеспечению срез профиля.Каждый срез состоит из списка ~ 8000 точек XY.Движение профилировщика записывается кодером.Информация о кодере обеспечивает 3-е измерение сканирования.
Еще одна важная вещь, которую следует отметить, - это то, что профилировщик может перемещаться по объекту взад-вперед.Когда это происходит, я хочу заменить ранее прочитанные / нарисованные фрагменты новыми (в зависимости от положения кодера).На данный момент я достигаю этого с помощью кругового буфера срезов, который я сохраняю по количеству кодировщиков.Это также означает, что я захочу выбросить фрагменты по мере заполнения буфера и начала перезаписи старых фрагментов.Для того, чтобы отобразить нужное количество предмета на экране - мне нужно нарисовать 1000 срезов данных профиля за раз.Сейчас я представляю объект как облако точек.В будущем мы можем попытаться присоединить соседние фрагменты и отобразить их в виде списка треугольников.
Я новичок в DirectX, но, используя книги и онлайн-примеры, я дошел до того, что рисую объект в 3D, но я убежден, что я неэффективно / правильно использую Vertex Buffers.Большинство примеров, которые я нашел, работают с очень статичными моделями.Поэтому они имеют тенденцию создавать единый буфер вершин со своим списком точек, а затем просто манипулируют матричными преобразованиями.Я, с другой стороны, буду очень быстро обновлять сцену, когда получаю данные профиля из нашего оборудования.
В настоящее время я создаю новый буфер вершин для каждого фрагмента, который я читаю. Когда я рисую сцену, яперебрать мой список до 1000 буферов и вызвать Draw () для каждого.Я заметил, что если я урезал вдвое количество буферов вершин, отображаемых за раз, мой FPS значительно увеличился, тогда как при уменьшении вдвое числа точек вершин на буфер было мало улучшений, поэтому я принимаю это как показатель того, что несколько буферов вершинэто неправильный способ приблизиться к этому.
Итак, к моему внутреннему вопросу ... Интересно, смогу ли я поместить все эти вершины в один буфер вершин, когда вершины меняются так часто.Могу ли я обновить точки в существующем буфере вершин?Или я должен просто воссоздавать один новый буфер каждый раз, когда обновляю сцену?И последнее, о чем следует помнить, это то, что количество точек на срез от аппаратного обеспечения будет варьироваться - поэтому, когда речь идет о перезаписи предыдущих срезов, новый срез может иметь больше или меньше точек, чем заменяемый срез.
Спасибо за ваше время.Любой совет будет высоко ценится!