Использование альфа канала

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Использование альфа канала

Сообщение lellel » 01.08.2008 (Пт) 21:46

разбираюсь с альфой...
а возможно ли текстуру испозовать в качестве аргумента при альфасмешении?
то есть у этой текстуры нет альфа канала, она сама долна являться как бы картой прозрачности.. картинка монохром..

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Сообщение djalex777 » 01.08.2008 (Пт) 22:32

Возможно. Смотри в сторону pixel shader. Хотя можно обойтись и без него.

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

Сообщение Ktulhu » 02.08.2008 (Сб) 13:45

lellel
фотожопиш свою оригинальную текстуру, открываешь вкладку "каналы", добавляешь туда новый канал (он будет считаться альфой). Копипастиш на него свою текстуру прозрачности и сохраняешь в TGA 32bps с альфой.
Я ставил такие стэйты:
D3DDevice.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_BLENDDIFFUSEALPHA)
D3DDevice.SetRenderState (D3DRS_ALPHABLENDENABLE, True)
D3DDevice.SetRenderState (D3DRS_SRCBLEND, D3DBLEND_BOTHSRCALPHA)
D3DDevice.SetRenderState (D3DRS_DESTBLEND, D3DBLEND_BOTHSRCALPHA)

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Сообщение lellel » 03.08.2008 (Вс) 0:25

Ktulhu
хе, это я и сам знаю.. а вот если я заранее не знаю какую маску применю? маска ну в смысле какая текстура нужна в качестве альфы..
меня интересует именно использование текстуры в качестве альфа канала, а не использование альфа канала текстуры..

djalex777
примерчик есть?
а как без него?
(в принципе быстродействие не первое требование)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.08.2008 (Вс) 15:06

lellel
С помощью dp3 текстуры с TexFactor делаешь альфу из нужного цветового канала. В TexFactor загоняешь маску для выбора этого самого канала.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Сообщение lellel » 03.08.2008 (Вс) 22:03

Mikle
хм.. что то я совсем ничего не понял.. что за dp3 текстура?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 04.08.2008 (Пн) 10:10

dp3 - инструкция dotproduct, использовать для текстуры, из которой нужно создать альфу. Вот пример, давно написанный:
У вас нет доступа для просмотра вложений в этом сообщении.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Сообщение lellel » 04.08.2008 (Пн) 18:41

спасибо:) вроде то что нужно..

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Использование альфа канала

Сообщение lellel » 15.08.2008 (Пт) 15:54

да.. конечно пример я посмотрел, интересный.. только вот видимо я сам нечетко поставил задачу, и в итоге, используя пример получил не то, что требовалось..
требовалось использовать текстуру как маску для другой текстуры, причем в местах где первая текстура-маска темная под второй текстурой-слоем проступала третья текстура-фон..
ну типа как работа с масками в том же фотошопе..
вот как я сделал это:
Код: Выделить всё
  d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 0
 
  'd3dDevice.SetTexture 0, TexR1
  'd3dDevice.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
  'd3dDevice.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
 
  '1
  d3dDevice.SetRenderState D3DRS_TEXTUREFACTOR, &HFFFFFF

  d3dDevice.SetTexture 0, TexPort3     'текстура-маска
  d3dDevice.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SUBTRACT
  d3dDevice.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TFACTOR
  d3dDevice.SetTextureStageState 0, D3DTSS_COLORARG2, D3DTA_TEXTURE
 
  d3dDevice.SetTexture 1, TexPort     'текстура-слой
  d3dDevice.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_MODULATE
  d3dDevice.SetTextureStageState 1, D3DTSS_COLORARG1, D3DTA_CURRENT
  d3dDevice.SetTextureStageState 1, D3DTSS_COLORARG2, D3DTA_TEXTURE
  d3dDevice.SetTextureStageState 1, D3DTSS_TEXCOORDINDEX, 0
  d3dDevice.SetTextureStageState 1, D3DTSS_RESULTARG, D3DTA_TEMP
 
  '2
  d3dDevice.SetTexture 2, TexPort3     'текстура-маска
  d3dDevice.SetTextureStageState 2, D3DTSS_COLOROP, D3DTOP_SELECTARG1
  d3dDevice.SetTextureStageState 2, D3DTSS_COLORARG1, D3DTA_TEXTURE
  d3dDevice.SetTextureStageState 2, D3DTSS_TEXCOORDINDEX, 0
 
  d3dDevice.SetTexture 3, TexPort2     'текстура-фон
  d3dDevice.SetTextureStageState 3, D3DTSS_COLOROP, D3DTOP_MODULATE
  d3dDevice.SetTextureStageState 3, D3DTSS_COLORARG1, D3DTA_CURRENT
  d3dDevice.SetTextureStageState 3, D3DTSS_COLORARG2, D3DTA_TEXTURE
  d3dDevice.SetTextureStageState 3, D3DTSS_TEXCOORDINDEX, 0
   
  '1+2
  d3dDevice.SetTextureStageState 4, D3DTSS_COLOROP, D3DTOP_ADD
  d3dDevice.SetTextureStageState 4, D3DTSS_COLORARG1, D3DTA_CURRENT
  d3dDevice.SetTextureStageState 4, D3DTSS_COLORARG2, D3DTA_TEMP

вот, что было нужно, но за пример все равно спасибо:)
У вас нет доступа для просмотра вложений в этом сообщении.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList