Комментарий к Статье Прозрачные объекты.
Статья отличная.
Но вот у меня только долго прозрачнасть не палучалась из-за маленького ньюанса.
В статье упущен следующий факт: флаги D3DRS_SRCBLEND и D3DRS_DESTBLEND
вот в этом месте месте:
> Для включения альфа блендинга, в Direct3D необходимо установить
> параметр D3DRS_ALPHABLENDENABLE в TRUE:
> m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
Не знаю как в DX8, а у меня в DX9 без этого ничего не работало.
Так что прошу данный момент рассмотреть и по возможности
включить в статью.
А влияет ли формат вершин на прозрачность?) Что-то делаю все как в статье, но у меня не получаются прозрачные текстуры(
Не преобразованный формат вершин.
Зачем в семпле столько левых либ подключено?
Он у меня даже не думает компилиться.
Олегус верно подметил, что без срцбленда ничего не работает, хотя с ним он вобще черную текстуру рисует.
nix
g_lpD3DD9->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE); g_lpD3DD9->SetRenderState( D3DRS_COLORVERTEX,TRUE); g_lpD3DD9->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE,D3DMCS_COLOR1); g_lpD3DD9->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA); g_lpD3DD9->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA); g_lpD3DD9->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE); g_lpD3DD9->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); g_lpD3DD9->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE); g_lpD3DD9->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); g_lpD3DD9->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); g_lpD3DD9->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
ЭТО чудо! заработало!
Оказывается я свет вырубил нечаянно, забавно выглядел голый альфаканал без ргб текстуры.
Пасиба, теперь могу продолжить писать свою игрушку, хотя в идеале я собирался юзать в ней пиксельные шейдеры.
)
не подскажите, статья хорошая. но мне нужен был как раз другой способ(почему то в статье о нем не ласково отозвались) я про ColorKey. Загрузил я текстуру D3DXCreateTextureFromFileEx наложил на примитив(квадрат), формат вершин с rhw(т.е. преобразованная вершина для 2д координат). так вот запускаю и что происходит, квадратик и правда вырезал весь ColorKey, НО если я еще рисую квадрат в rhw то на нем текстура прозрачна, но если например стандартный чайник D3DXCreateTeapot, то при наведении на него эта текстура(делаю курсор мыши) прозрачна, но то место что прозрачно закрашивается цветом которым я чищу
Device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(32,87,202), 1.0f, 0); т.е. D3DCOLOR_XRGB(32,87,202), как быть ребята? как избавиться от этого не до конца прозрачного квадратика?)
все разобрался) видимо проверка не проходила на буфер глубины.
т.е. если сначала рисовать чайник, то этого не до конца прозрачного квадратика не будет)
Тема в архиве.