Я написал небольшую DirectX 11 приложение на Windows 10 x64 с использованием C++. Теперь я хочу визуализировать текстуры с низким разрешением (например, 16px * 16px), не теряя при этом резкости при увеличении (как в играх типа Terraria). Так только вариантов я вижу, что делают спрайты текстур высокого разрешения или изменить состояние сэмплер от D3D11_FILTER_MIN_MAG_MIP_LINEAR к D3D11_FILTER_MIN_MAG_MIP_POINT. Первый вариант для меня не вариант, потому что я хочу сохранить видеопамять и не тратить ее на избыточную информацию. Но второй подход вызывает некоторые новые проблемы. Если я перемещаю текстурированный прямоугольник с помощью этого сэмплера, я получаю раздражающее мерцание.DirectX 11 фильтр текстуры линейный/точка фликера
Подумав об этом, я пришел к тому, что с помощью D3D11_FILTER_MIN_MAG_MIP_POINT всегда будет вызывать эту вспышку. На следующем рисунке показано, как я понял точечную фильтрацию, а также показывает причину мерцания. На нем можно увидеть процесс горизонтальной выборки, используя точечную фильтрацию, из текстурированного прямоугольника с низким разрешением, перемещающегося вправо.
Я не отправлял никакого кода, потому что я думаю, что эта проблема не связана с каким-либо конкретным кодом и не помогу. Так что если я ошибаюсь в этом предположении, пожалуйста, сообщите.
Наконец, вопрос в том, как я могу исправить это или какие альтернативы оставлены?
Ответ на ваш вопрос: вы должны выровнять текстурированные квадратные тексели с пикселями поверхности. Чтобы убедиться, что вам нужно только сдвинуть квад/ув на несколько коэффициентов текселя. Вы можете добиться того, чего хотите, либо с линейным, либо с ближайшим сэмплером, но, если возможно, попробуйте сохранить линейный, поскольку он может быть быстрее, чем ближайший на современном оборудовании. – galop1n