Я пытаюсь использовать текстуру поиска для замены вычисления atan2(y,x)
во фрагментном шейдере.
Он работает очень хорошо с точки зрения увеличения скорости / производительности, но с видимой потерей точности:
Полный рисунок здесь .
Я думал, что причина была в том, как я перевернул результат atan2
в один байт перед созданием текстуры:
tempFloat = (float) ((Math.atan2(dfry, dfrx) + Math.PI) / (Math.PI * 2.0));
tempInt = (int) Math.floor(tempFloat * 255.0f);
pixelsForBitmap[index++] = Color.rgb(tempInt , tempInt , tempInt);
Что я прочитал позже в фрагментном шейдере следующим образом:
float myAtan = texture2D(u_TextureUnit, uv_coords).r;
myAtan = (myAtan *2.0-1.0)*PI;
Полученная текстура имела некоторую полосу, где усекались десятичные дроби,но использование идеального радиального градиента, созданного в графическом редакторе без видимых полос, по-прежнему дает артефакты.
Я уже использую фильтр GL_NEAREST
вместо GL_LINEAR
.
Среди вещей, которые япопробовал:
Учитывая, насколько полезной, но дорогой является функция atan(y,x)
, я ожидал, что atan2 LUT будет горячей темой, но я не могу найти больше информации.