Доброго дня форумчанам. С графикой никогда напрямую не работал, вопрос будет по графике в целом и по Qt Quick 3D в частности. Итак, у нас есть текстура в очень низком разрешении (скажем, 8х8 пикселей), натягиваем её на прямоугольник. Затем приближаем камеру к прямоугольнику - таким образом, на экране он занимает уже не 8х8, а пусть 64х64 пикселя. Текстура при этом оказывается линейно интерполированной (нечёткой), а хотелось бы интерполяцию на основе ближайших соседей (чтобы 1 пиксель при масштабировании в N раз превращался к квадрат NxN). Соответственно, вопросы: как вообще происходит обработка текстур при приближении/отдалении камеры (масштабирует ли их видеокарта автоматически каждый раз, как меняется положение камеры, или масштабирование делают "руками" внутри движка)? И как изменить интерполянт? Первое, что приходит в голову - вручную растянуть текстуру с нужной интерполяцией и уже её накладывать, но не уверен, что это правильный способ, ведь интерполянт останется прежним и при ещё большем увеличении мы снова наткнёмся на нечёткие границы между пикселями - этим способом мы лишь отодвинем границу, после которой будет видна нечёткость.
По-моему это должно делаться наоборот: текстура должна храниться в максимальном разрешении, а при надобности ее размер уменьшается. В unity так сделано https://docs.unity3d.com/Manual/DynamicResolution.html
Ладно, допустим, но кто отвечает за интерполяцию текстур? Сама видеокарта? Или вручную можно задать алгоритм? Ведь при любом движении камеры необходимо пересчитывать, как будет выглядеть текстура: повернули камеру, углы изменились, из-за перспективы квадрат стал трапецией - текстуру необходимо в неё вписать. Кто это делает? Видеокарта? Движок? Видеодрайвер? И можно ли поменять используемые для этих трансформаций алгоритмы?
Не выспался, шляпу линканул. Вобщем эта технология называется texture mipmap, когда в саму текстуру заложена информация, как понижать ее разрешение по мере надобности. Возможность еще на уровне direct3d-функций заложена https://docs.microsoft.com/en-us/windows/win32/direct3d9/texture-filtering-with-mipmaps
К сожалению, мне изначально приходится работать с текстурами очень низкого разрешения. Здесь https://learnopengl.com/Getting-started/Textures узнал, что есть флажок GL_NEAREST, включающий фильтрацию именно по ближайшим соседям, что мне и нужно. Осталось понять, как заставить QtQuick3D работать с этим флагом...