Как заставить d3d использовать альфа-значения моей вершины? - PullRequest
0 голосов
/ 01 сентября 2010

Я пытаюсь визуализировать текстурированный квад в d3d, и он не использует альфа-значения VERTICES для квадрата, в который визуализируется текстура. Скорее он использует альфу ТЕКСТУРЫ.

Я хочу, чтобы d3d использовал альфу ВЕРТИКАЛЬОВ многоугольника, на котором он размещен.

У меня есть идея, что это связано с SetTextureStageState , но я пока не могу его найти ..

1 Ответ

0 голосов
/ 01 сентября 2010

ОК, вот что я получил:

перечисление D3DTSS (содержащее значения по умолчанию для настроек D3DTSS_ *)

D3DTA перечисление

// where does the SRC color come from?
// why, the currently bound texture of course!
d3d->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
// Default:  D3DTA_TEXTURE (anyway.  So this setting is redundant.)

БОЛЬШОЕ ИЗМЕНЕНИЕ СЛЕДУЕТ В СЛЕДУЮЩЕМ:

// let the alpha component be read from the
// diffuse color of the vertex..
d3d->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
// Default: D3DTA_TEXTURE (which would be "pull alpha from the texture")

// because my vertex declaration is set up to send 1 color, and
// D3DRS_DIFFUSEMATERIALSOURCE is set to D3DMCS_COLOR1, this means
// to use the vertex alpha i specify.  i think.

Остальное на самом деле ничего не меняет по сравнению со значениями по умолчанию, но оно здесь, так что все видно:

// DEST where does the alpha value come from?  also the
// diffuse component
d3d->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
// Default:  D3DTA_CURRENT.  I believe this means "the destination will
// be whatever the existing color in the framebuffer already is"

// setting up as is default, 
d3d->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT);
// Default:  D3DTA_CURRENT.  No change.

Я думаю, что это работает.

В дополнение к пониманию: эта ссылка содержит старый, но очень удобный инструмент под названием MFCTex:

MFCTex program

Так что очень легко увидеть эффект того, что происходит, когда вы используете разные аргументы.

Я понимаю, что - это не крутой способ сделать это больше, и действительно какое-то время круто было писать собственные вершинные и пиксельные шейдеры.

...