У вас есть много вариантов:
Во-первых, вы можете использовать геометрический шейдер для динамического генерирования вершин, хотя это будет работать только при наличии достаточно мощной системы.
Другой вариант - нарисовать ваш объект за несколько проходов. Если вам не важна скорость заполнения, вы можете просто нарисовать набор квадов вдоль плоскостей xyz, которые будут напрямую считываться в массив томов.
Следуя той же схеме рассуждений, вы также можете выполнить лучевое наведение объекта для его рендеринга в фрагментном шейдере, который может быть быстрее в зависимости от размера NX, NY и NZ.
Если вам нужно нарисовать квадраторы, другая возможность - хранить данные вершин отдельно, а затем использовать чтение из текстуры вершинного шейдера для определения цветовых координат. Вы можете разделить рисунок всей сетки на несколько проходов рендеринга.
Если вам нужно сохранить данные о цвете вместе с вершинами, последнее, что вы можете попробовать, - это сохранить 4 копии каждого цвета вместе с 2 компонентами для координаты каждой вершины в направлении x-z. Чтобы нарисовать весь массив, вы должны сделать 6 проходов, по одному на каждую грань куба. Это можно существенно оптимизировать, обрезая проходы для невидимых граней.
Окончательный выбор курса зависит от объема данных, которые вам нужно нарисовать, типа оборудования, на которое вы ориентируетесь, и от того, сколько работы вы хотите потратить на этот проект.