Поделиться через


Фильтрация текстур (Direct3D 9)

Когда Direct3D отображает примитив, трехмерный примитив сопоставляется двумерному экрану. Если примитив имеет текстуру, Direct3D должен использовать эту текстуру для создания цвета для каждого пикселя обработанного двумерного изображения примитива. Для каждого пикселя изображения примитива на экране необходимо получить значение цвета из текстуры. Этот процесс называется фильтрация текстур.

При проведении операции фильтрации текстуры используемая текстура также обычно увеличивается или уменьшается. Другими словами она сопоставляется изображению примитива, которое больше или меньше, чем она сама. Увеличение текстуры может привести к сопоставлению множества пикселей одному текселю. Результатом может быть грубый внешний вид. Уменьшение текстуры часто означает, что один пиксель сопоставляется множеству текселей. Полученное изображение может быть нечетким или «зубчатым». Чтобы устранить эти проблемы, необходимо выполнить наложение цветов текселей для получения цвета пикселя.

Direct3D упрощает сложный процесс фильтрации текстур. Предоставляется три типа фильтрации текстур — линейная фильтрация, анизотропная фильтрации и фильтрация с использование MIP-карт. При отказе от фильтрации текстур Direct3D использует метод под названием выборка с ближайшей точки.

Каждый тип фильтрации текстур имеет как преимущества, так и недостатки. Например использование линейной фильтрации текстур может привести к неровным краями или грубому внешнему виду конечного изображения. Однако этот метод фильтрации текстур требует меньшего количества вычислений. Фильтрация с помощью MIP-карт обычно обеспечивает оптимальные результаты, особенно в сочетании с анизотропной фильтрацией. Однако она требует больше всего памяти среди всех методов, поддерживаемых Direct3D.

Приложения, использующие указатели интерфейса текстуры, должны задать текущий метод фильтрации текстур, вызвав метод IDirect3DDevice9::SetSamplerState . Задайте для первого параметра целочисленный номер индекса (0–7) текстуры, для которой выбирается метод фильтрации текстур. Передайте D3DSAMP_MAGFILTER, D3DSAMP_MINFILTER или D3DSAMP_MIPFILTER для второго параметра, чтобы задать фильтр увеличения, минификации или mipmapping. Передайте член перечисленного типа D3DTEXTUREFILTERTYPE в качестве значения в третьем параметре.

В этом разделе представлены методы фильтрации текстур, поддерживаемые Direct3D. Он состоит из следующих разделов.

Примечание

Хотя состояния отрисовки с фильтрацией текстур, присутствующие в перечислимом типе D3DRENDERSTATETYPE , заменяются состояниями стадии текстуры, IDirect3DDevice9::SetRenderState, в отличие от версии IDirect3DDevice2, не завершается ошибкой при попытке их использования. Скорее, система сопоставляет эффекты этих состояний отрисовки с первым этапом каскада многотекстовых значений, этапом 0. Приложения не должны смешивать устаревшие состояния отрисовки с соответствующими состояниями стадий текстуры, так как могут возникнуть непредсказуемые результаты.

 

Текстуры Direct3D