Учитывая трехмерную однородную сетку, я хотел бы установить значения пограничных ячеек относительно значений их ближайшего соседа внутри сетки. Например, для сетки 10x10x10 для вокселя в координатах (0, 8, 8) я хотел бы установить значение следующим образом: val (0, 8, 8) = a * val (1,8,8).Обработка граничных условий в OpenCL/CUDA
Поскольку может быть любого вещественного числа, я не думаю, что текстура + пробоотборники могут быть использован в данном случае. Кроме того, метод должен работать и с обычными буферами.
Также, поскольку координата вокселя границы может быть либо частью угла сетки, края или грани, 26 (= 8 + 12 + 6), существуют разные варианты поиска ближайшего соседа (например, если координата была в (0,0,0), его ближайший сосед сказал, что сетка будет (1, 1, 1)). Таким образом, существует много потенциальных ветвлений.
Есть ли «элегантный» способ сделать это в OpenCL/CUDA? Кроме того, целесообразно ли обрабатывать границу с помощью отдельного ядра?
Я бы использовал 'clamp (val, min, max)' Что делает min() и max () вместе. – DarkZeros
Хороший, @DarkZeros. Похоже, я слишком люблю свои старые способы. Действительно, clamp() - лучший выбор. –