Попытка выяснить конкретное приложение альфа-маски, используя IDirect3D9 # SetTextureStageState - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь создать систему, в которой я могу вызвать затухание текстуры, используя в качестве альфа-маски вторую текстуру.

Я загружаю цветную текстуру на этапе 0 и текстуру маски на этапе 1Я могу заставить их работать правильно, так чтобы альфа-значения основывались на маске, и я мог получить постепенное исчезновение, используя скользящий D3DTA_CONSTANT.Проблема в том, что я пытаюсь создать определенное поведение, которое я не могу вывести из доступного D3DTA.

В основном я хочу иметь 2 значения, одно из которых называется "шаг", а другое -«расплывчатый».«Неопределенное» значение будет оставаться постоянным на протяжении всего эффекта, а аргумент «step» будет начинаться с 0 и увеличиваться до 255 в течение нескольких кадров.Я пытаюсь создать следующее поведение:

* Тексты со значениями альфа-маски ниже значения 'step' draw with zero alpha.

* Тексты со значениями альфа-маски выше 'шаг '+' расплывчатое 'рисование с 255 альфа.

* Тексты со значениями альфа-маски в диапазоне от' шаг 'до (' шаг '+' расплывчатый ') рисуют с масштабированием альфа, так что шаг альфа''это нулевая альфа, а альфа (' шаг '+' расплывчатый ') рисует с максимальной альфой.

Вот график, показывающий функцию, поскольку ее трудно объяснить словами:

http://imageshack.us/photo/my-images/834/desiredalphamaskfunctio.png/

Основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как настроить этапы текстуры так, чтобы средний диапазон (между шагом и шагом + неопределенность) «растягивал» свои значения между 0 и255. Там нет прямого деления или умножения, только модуляция, поэтому я не могу сделать это очевидным способом, но я почти уверен, что есть способ сделать это, что просто еще не пришло мне в голову.(У меня была некоторая надежда на D3DTOP_MULTIPLYADD, но «умножение» оказалось просто еще одной модуляцией.)

У кого-нибудь есть идеи?

Заранее спасибо за любой совет.

...