Искажение текстуры OpenGL ES 2.0 при большой геометрии GL _ПОВТОР

OpenGL ES 2.0 имеет серьезные проблемы с точностью выборки текстур -. Я видел темы с похожей проблемой , но я еще не видел реального решения этой проблемы "искаженной текстуры OpenGL ES 2.0" .

Это не связано с форматом изображения текстуры или цветовыми буферами OpenGL, похоже, это ошибка точности. Я не знаю, что конкретно приводит к сбою точности -. Похоже, это искажение вызвано не только размером геометрии, потому что простое масштабирование положения вершины, переданное вершинному шейдеру, не решает проблему.


Вот несколько примеров искажения текстуры:

Проблема текстуры ограничена мелкомасштабной геометрией в OpenGL ES 2.0, в противном случае выборка текстуры выглядит нормально, но эффект зернистости постепенно ухудшается по мере удаления данных вершин от начала координат XYZ (0,0,0)

Эти проблемы с текстурами не возникают на рабочем столе OpenGL (отлично работает в Windows XP, Windows 7 и Mac OS X)

Я видел, что проблема возникает только на Android, iPhone,или WebGL (, который похож на OpenGL ES 2.0)


Все текстуры имеют степень 2 , но проблема остается

  • . Масштабирование данных вершин-Значения положения X Y Z вершины находятся в диапазоне: -от 65536 до +65536 с плавающей запятой

    • Я понял, что это слишком много, поэтому я попытался разделить позиции вершин на 1024, чтобы уменьшить геометрию и, надеюсь, получить более точную точность с плавающей запятой, но это не решило и не уменьшило проблему искажения текстуры
  • . Масштабирование вида модели или масштабирование матрицы проекции не помогает

  • Изменение параметров фильтрации текстур не помогает

    • Отключение mipmapping или использование GL _NEAREST/GL _LINEAR ничего не делает
    • Включение/выключение анизотропии ничего не дает
    • Эффект полос сохраняется даже при использовании GL _CLAMP
  • Разделение координат текстуры, переданных в вершинный шейдер , а затем их обратное умножение на правильные значения во фрагментном шейдере, также не работает

  • . точность highp sampler2D, highp float, highp int-во фрагменте или вершинном шейдере ничего не изменилось (lowp/medium тоже не работало)

Я думаю, что эта проблема должна быть решена в какой-то момент -Увидев, что игры на основе OpenGL ES 2.0 -способны отображать крупномасштабную -высоко детализированную геометрию

6
задан Community 23 May 2017 в 12:09
поделиться