Попытка выяснить конкретное приложение альфа-маски, используя IDirect3D9#SetTextureStageState
Я пытаюсь создать систему, в которой я могу вызвать затухание текстуры, используя в качестве альфа-маски вторую текстуру.
Я загружаю цветную текстуру на этапе 0 и текстуру маски на этапе 1. Я могу заставить их корректно распределиться по этапам, чтобы альфа-значения основывались на маске, и я мог заставить затухание входить и выходить, используя скользящий D3DTA_CONSTANT. Проблема в том, что я пытаюсь создать определенное поведение, которое я не могу вывести из доступного D3DTA.
В основном я хочу иметь 2 значения, одно из которых называется "шаг", а другое - "неопределенный". "Неопределенное" значение будет оставаться постоянным на протяжении всего эффекта, а аргумент "step" будет начинаться с 0 и увеличиваться до 255 в течение нескольких кадров. Я пытаюсь создать следующее поведение:
* Тексты со значениями альфа-маски ниже значения "шага" рисуются с нулевой альфа.
* Тексты со значениями альфа-маски выше 'step' + 'смутное' рисование с 255 alpha.
* Тексты со значениями альфа-маски в диапазоне между "шагом" и ("шагом" + "расплывчатым") отрисовываются с масштабированием альфы таким образом, чтобы альфа "шага" равнялась нулю, а альфа ("шаг" + "расплывчатым") рисуется с макс альфа.
Вот график, показывающий функцию, поскольку это сложно объяснить словами:
http://imageshack.us/photo/my-images/834/desiredalphamaskfunctio.png/
Основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как настроить этапы текстуры так, чтобы средний диапазон (между шагом и шагом + расплывчатым) "растягивал" свои значения между 0 и 255. Прямого деление или умножение, просто модуляция, так что я не могу сделать это очевидным способом, но я уверен, что есть способ сделать это, который просто еще не приходил мне в голову. (У меня была некоторая надежда на D3DTOP_MULTIPLYADD, но "умножение" оказалось просто еще одной модуляцией.)
У кого-нибудь есть идеи?
Спасибо заранее за любые советы.