Я пробовал так много разных стратегий, чтобы получить полезную функцию шума, и ни одна из них не сработала.Итак, как реализовать перлин-шум на видеокарте ATI в GLSL?
Вот методы, которые я попробовал: я попытался поместить данные перестановки и градиента в текстуру GL_RGBA 1D и вызвать функцию texture1D.Однако один вызов этой реализации шума приводит к 12 вызовам текстуры и убивает частоту кадров.
Я попытался загрузить данные перестановки и градиента в единый массив vec4, но компилятор не позволит мне получить элементв массиве, если индекс не является константой.Например:
int i = 10;
vec4 a = noise_data[i];
выдаст ошибку компилятора:
ОШИБКА: 0:43: не поддерживается при использовании косвенного индекса временного массива.
Значение можетизвлекайте данные только так:
vec4 a = noise_data[10];
Я также пытался запрограммировать массив непосредственно в шейдер, но у меня возникла та же проблема с индексами.Я слышал, что видеокарты NVIDIA на самом деле разрешат этот метод, но ATI этого не сделает.
Я попытался создать функцию, которая возвращала бы конкретную жестко закодированную точку данных в зависимости от входного индекса, но эту функцию вызывали 12 разналичие 64 операторов if сделало время компоновки невыносимым.
ATI не поддерживает встроенные функции шума для glsl, и я не могу просто предварительно рассчитать шум и импортировать его как текстуру, потому что я имею дело сфракталы.Это означает, что мне нужна бесконечная точность расчета шума во время выполнения.
Итак, главный вопрос ...
Как?