Повышение точности в текстуре поиска atan2 - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь использовать текстуру поиска для замены вычисления atan2(y,x) во фрагментном шейдере.

Он работает очень хорошо с точки зрения увеличения скорости / производительности, но с видимой потерей точности:

OMG jaggies! Yuck!

Полный рисунок здесь .

Я думал, что причина была в том, как я перевернул результат 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 будет горячей темой, но я не могу найти больше информации.

...