Зачем адресуются текстуры в формате с плавающей запятой?

Почему дополнительная работа требуется при вычислении адреса с использованием формулы (int)(width*sX) + (int)(height*sY)*width, вместо более простого способа с x + y * width? Какие преимущества и возможное ускорение могут быть достигнуты путем нормализации значений и пересчета их в целые числа при изменении размеров текстур?
  • 25 июля 2024 г. 21:32
Ответы на вопрос 2
Адресация текстур в формате с плавающей запятой используется для более точных и гибких расчетов координат текстурных узлов. Когда мы используем вещественные значения для адресации текстур, мы можем получить более плавные и точные результаты при интерполяции значений и масштабировании текстур.

Дополнительная работа, которая требуется при вычислении адреса с использованием формулы (int)(width*sX) + (int)(height*sY)*width, вместо более простого способа с x + y * width, связана с необходимостью округления вещественных значений до целых чисел для корректного доступа к пиксельным данным. Однако, при использовании формулы с плавающей запятой, мы можем избежать ошибок, связанных с округлением и потерей точности при вычислениях.

Нормализация значений и пересчет их в целые числа при изменении размеров текстур может принести преимущества в виде ускорения вычислений и улучшения качества интерполяции текстурных данных. При этом мы можем избежать потери точности и ошибок, связанных с округлением значений при доступе к текстурным данным. Таким образом, использование нормализации значений и формулы с плавающей запятой может улучшить эффективность работы с текстурами и производительность графических приложений.
Так сложилось по историческим причинам и для удобства использования. 
1) Раньше текстуры имели размеры только кратные степени двойки, потому перевод из флоат в целые был простейшей операцией ничуть не медленнее чем целочисленные вычисления.
2) Раньше и очень долго не было прямого доступа к реальному размеру текстуры, потому нормализованное значение давало удобство доступа через относительные координаты, т.е. ты мог менять размеры текстур на лету не меняя остальной код что давало прирост производительности, т.к. для отрисовки объекта в далеке ты мог использовать маленькие текстуры и меняя их размер в автоматическом режиме увеличивая их размер при приближении.

Собственно говоря, если ты будешь реализовывать софтверный рендер то тебе станет понятно что такое задание координат тем более для текстур с размерами кратными степени двойки будет удобно со всех сторон и со стороны разработки и со стороны использования.
Похожие вопросы