Прозрачность и Текст

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

Модератор: Mikle

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Прозрачность и Текст

Сообщение Bonesnapper » 22.09.2004 (Ср) 8:00

КАК В dx8 СДЕЛАТЬ У КАРТИНКИ ПРОЗРАЧНЫЙ ЦВЕТ
И КАК НА НЕЙ ЧТО НИБУДЬ НАПИСАТЬ
И МОЖНО ЛИ МЕНЯТЬ СТЕПЕНЬ ПОЗРАЧНОСТИ КАРТИНКИ
(КАРТИНКА НАТЯНУТА НА 2 ТРЕУГОЛЬНИКА)

:?: :?: :?:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 22.09.2004 (Ср) 22:57

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

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 23.09.2004 (Чт) 17:20

Там что то не то похоже DX7
А я спрашиваю про 8

:!:

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 25.09.2004 (Сб) 17:16

кто нибуть подскажите :!:
знаете ведь только молчите

как мне сделать полупрозрачную текстуру и текстуру с прозрачным фоном
(я знаю что ее надо создавать с помощью D3DX8.CreateTextureFromFileEx)

Так как мне написать на текстуре или как писать текст в 3d
D3DX8.CreateTextureFromFileEx

:x :x :x

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

Сообщение Mikle » 26.09.2004 (Вс) 14:03

Чтобы писать на текстуре, ее нужно создавать с флагом RenderTarget и не из файла, а просто CreateTexture. Для прозрачности формат текстуры должен содержать альфа-компаненту. Как конкретно производить рендер в текстуру - пример. Также можно выводить текст поверх 3D через D3DXFont (самое простое, но медленное) или создать заранее текстуру со шрифтом и выводить по два треугольника на букву.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 26.09.2004 (Вс) 14:44

Обязательно альфа компаненту а с color key нельзя
и также
как все таки треугольник с текстурой сделать полупрозрачный
побовал менять материал неработает (работает но только без текстуры)

:)

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

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

С colorkey полупрозрачности, насколько знаю, не сделаешь. А материалом или альфой в VertexColor можно. Только нужно правильно установить текстурестейджстейты.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 30.09.2004 (Чт) 5:39

Что значит правильно установить текстуре стейджстейты ?
У меня текстура 256х256 я натягиваю на 2 тругольника
С colorkey полупрозрачности, насколько знаю, не сделаешь

так это понятно спомощью не надо сделать какой то
цвет прозрачным вот я и спрашиваю как
:?:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 30.09.2004 (Чт) 15:57

Bonesnapper писал(а):надо сделать какой то
цвет прозрачным вот я и спрашиваю как
:?:

Само просто - в фотошопе. Окно - показать каналы. Создаешь дополнительный (альфа) канал. В основном (RGB) канале выделяешь участок картинки. Возвращаешься на альфу. Заполняешь её серым цветом. Чем темнее - тем участок картинки будет прозрачнее. Альфа - каналов делаешь сколько надо. Сохраняешь как .TGA.

Потом манипулируешь параметрами:
Dim D3DDevice As Direct3DDevice8
With D3DDevice
.SetRenderState D3DRS_ALPHABLENDENABLE, 1
.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
.SetTextureStageState 0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR
.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR
.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
.SetRenderState D3DRS_SPECULARENABLE, 1
.SetRenderState D3DRS_SHADEMODE, 2
.SetRenderState D3DRS_DITHERENABLE, 1
.SetRenderState D3DRS_LIGHTING, 1
.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE
.SetRenderState D3DRS_AMBIENT, &H70707070
.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
End With

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 05.10.2004 (Вт) 8:36

Ладно прозрачный фон сделаем в фотошопе :)

А Как мне отрендерить текстуру с нужной мне альфой
в данный момент (предположим что она должна плавно исчезнуть)
Пробовал работать с материалом работает, но без текстуры :evil:

:?:

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

Сообщение Mikle » 05.10.2004 (Вт) 9:46

Код: Выделить всё
  d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1
  d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 05.10.2004 (Вт) 21:44

Код: Выделить всё
Device.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR
Device.SetRenderState D3DRS_TEXTUREFACTOR, D3DColorARGB(Alpha, 255, 255, 255)

Просто изменяем переменную Alpha от 0 до 255
Чесно говоря не знаю почему и как это работает!
Но работает исправно не используя материалов!

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 06.10.2004 (Ср) 8:16

для D'alex
Че-то вся сцена становится прозрачной :?

для Mikle
Что такое ты написал и как это делает прозрачность :?:

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

Сообщение Mikle » 06.10.2004 (Ср) 10:28

Это те самые текстурестейджстейты. Указывают, что альфу берем из текстуры.
Само собой, как уже писал Юрич, нужно еще:
Код: Выделить всё
  d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, True
  d3dDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
  d3dDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 06.10.2004 (Ср) 15:46

Если укажешь
D3DDevice.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE
то прозрачность будет зависеть от наличия альфы в текстуре.

Если
D3DDevice.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE
независимо, есть текстура, или нет, на прозрачность влияет только
Material.diffuse.a

не забудь ставить
Material.Ambient = Material.diffuse
Последний раз редактировалось Yurich 06.10.2004 (Ср) 16:02, всего редактировалось 2 раз(а).

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 06.10.2004 (Ср) 15:55

Bonesnapper писал(а):Че-то вся сцена становится прозрачной :?


Если параметры указал один раз и прорисовываешь всю сцену сразу, то так и будет. Надо рисовать по-разному - значит перед прорисовкой каждого элемента перенастраивай параметры.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 07.10.2004 (Чт) 14:04

Всем спасибо вроде разобрался :D
Может заодно подскажете как наложить одну текстуру надругую
Я пробовал
D3DDevice.SetTexture 0, g_Texture1
D3DDevice.SetTexture 1, g_Texture2
но накладывается последняя :?
Мне же нужно - первая нормальная (непозрачная) , вторая полу прозрачная
Можно конечно отрендерить сначало первую затем 2 чуть выше
но хочется узнать как это сделать сразу

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

Сообщение Mikle » 08.10.2004 (Пт) 10:05

Например так:
Код: Выделить всё
d3dDevice.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
d3dDevice.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE

d3dDevice.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_MODULATE
d3dDevice.SetTextureStageState 1, D3DTSS_COLORARG1, D3DTA_TEXTURE
d3dDevice.SetTextureStageState 1, D3DTSS_COLORARG2, D3DTA_CURRENT

Это мультитекстурирование. Еще можно просто в два прохода, но это медленнее. И для этого не нужно "чуть выше", достаточно изменить D3DRS_ZFUNC.


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

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

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

    TopList