Рендеринг огромного количества данных - PullRequest
3 голосов
/ 14 июля 2011

У меня есть 3D-матрица с плавающей запятой, в худшем случае размер может быть (200000x1000000x100), я хочу визуализировать эту матрицу, используя Qt / OpenGL.

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

Я хотел бы знать, есть ли методы, которые имеют дело с этим видом визуализации.

Ответы [ 2 ]

7 голосов
/ 14 июля 2011

Общая идея называется уровень детализации рендеринга и представляет собой целую науку сама по себе.

Для вашего домена я бы рекомендовал два шага:

1) Уменьшите количество ячеек путем усреднения (среднеарифметическая функция) их в кубах разных размеров и кэширования этих кубов (как на диске, так и в ОЗУ). «Разное» означает здесь, что у вас есть одинаковые данные в кубах разных размеров, например, крупнозернистые кубики размером 10000x10000x10000 и более мелкие кубики размером 100x100x100 ячеек, обеспечивающие несколько уровней детализации. Вы должны организовать их в иерархическую структуру (более крупные, содержащие несколько более мелких), и для этого я бы порекомендовал Octree : http://en.wikipedia.org/wiki/Octree

2) Второй шаг - визуализация частей этого октри: Для этого используйте расстояние вашей камеры-точки до субкубов. Пройдите кубы и решите либо войти в подкуб, либо визуализировать больший куб, используя эту функцию расстояния и эвристически выбранные или угаданные пороговые значения.

(2) может быть дополнительно оптимизировано, но это необязательно: Чтобы оптимизировать этот рендеринг, организуйте куб для рендеринга в слои: направление слоев (будь то в x, y или z-слайсах) зависит на вашей камере - точка обзора, к которой она должна быть почти перпендикулярна. Затем рендеринг каждого среза в текстуру и вуаля, вам нужно всего лишь отрисовать один квад с этой текстурой для каждого среза, 1000 квадов не представляют проблемы для визуализации.

2 голосов
/ 14 июля 2011

В Qt есть способ эффективно рендерить огромное количество элементов. Проверьте examples / demo , который является частью QT.

...