Alpha в Direct3D

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

Модератор: Mikle

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Alpha в Direct3D

Сообщение Maxwell » 01.10.2003 (Ср) 16:13

:cry:Please Help!
Кто нибуть знает, как можно сделать эффект Alpha в Direct3DRM?
Что бы объект или текстура была прозрачной, для эффекта взрыва или ещё чего нибудь.

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

Сообщение Yurich » 02.10.2003 (Чт) 17:13

Про это уже было:
http://bbs.vbstreets.ru/viewtopic.php?t=2051
Ты свои модели в чем делаешь? Я - в 3ДМаксе и все (теперь уже) получается.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 02.10.2003 (Чт) 18:19

Спасибо за помощь, теперь всё работает.
Правда, что бы сделать красивый еффект Glow к примеру,
приходиться пару раз в Max-e копировать объект с прозрачностью, а то получаются кроя текстуры криво обрезанные (с черными линиями).
Ты не знаешь, как можно что бы текстура обрезалась качественно (с Alpha каналом)?

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

Сообщение Yurich » 03.10.2003 (Пт) 0:53

Я не совсем понял. Ты прозрачность ключевого цвета (как правило черного) включил?

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 03.10.2003 (Пт) 14:28

Да включил, просто у спрайтов по кроям обычно цвет чуть светлее черного и тогда он по краям его оставляет.
Как я понял в играх, в спрайтах где чёрный, там Alpha на полную, где
черный светлее там прозрачность поменьше.
Как бы так сделать или хотя бы,что бы он края смазывал? :?

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

Сообщение Mikle » 03.10.2003 (Пт) 15:24

Тогда лучше использовать AlfaBlending, а не AlfaTest. Прозрачный цвет не включать, а сразу рисовать в текстуре четвертый слой (форматы TGA или PNG).
Тогда сам нарисуешь прозрачность такую, какая нужна.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 05.10.2003 (Вс) 21:37

Объясни пожалуйста поподробнее, как этим AlfaBlending-ом пользоваться?

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

Сообщение Mikle » 06.10.2003 (Пн) 15:28

d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, True
ну и
d3dDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
d3dDevice.SetRenderState D3DRS_DESTBLEND, 3DBLEND_INVSRCALPHA
d3dDevice.SetRenderState D3DRS_ALPHAFUNC, D3DCMP_GREATER
d3dDevice.SetRenderState D3DRS_BLENDOP, D3DBLENDOP_ADD
последние четыре строчки - это например, зависят от того, какого эффекта нужно добиться.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 06.10.2003 (Пн) 17:35

Я в Direct3DRM, а там в Direct3DRMDevice я такой фичи как SetRenderState, не нашел. Там есть
.SetRenderMode D3DRMRENDERMODE_BLENDEDTRANSPARENCY и все.
В Direct3DRM вобще есть такая штука, или мне придётся обламаться?

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

Сообщение Mikle » 06.10.2003 (Пн) 17:49

Я, вообще-то, имел ввиду DX8, а там нет D3DRM и D3DIM, есть D3DDevice и D3DX. Седьмого DX не знаю.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 06.10.2003 (Пн) 18:47

У тебя есть какие нибудь исходники по Direct3D в DX8?
Если тебе не трудно скинь мне на maxwell@nm.ru, что бы мне в 8-ом разобраться.

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

Сообщение Mikle » 07.10.2003 (Вт) 15:48

В теме
"DirectX8 и всё такое для начинающих...."
есть ссылка и моя и Юрича.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 07.10.2003 (Вт) 17:48

Спасибо за ссылочку, не успел почитать, мельком глянул.
Позаумнее Direct3DRM будет.
Да кстати, сбился с темы, так как же прозрчность через *.TGA контролировать?

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

Сообщение Mikle » 07.10.2003 (Вт) 18:07

В TGA и PNG имеется, кроме R, G, B, четвертый слой - альфа компонента. Ее просто рисуешь в фотошопе. А дальше Direct3D все делает сам.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 07.10.2003 (Вт) 18:43

У меня кокой то баг, *.TGA как текстуру загрузил, объект почему то белый, не текстуриться. Закружаю *.BMP все работает.
Что за?

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

Сообщение Yurich » 07.10.2003 (Вт) 19:23

Maxwell писал(а):*.TGA как текстуру загрузил, объект почему то белый, не текстуриться. Закружаю *.BMP все работает.

Будь мил, говори в чем(dx7 или dx8)?

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 07.10.2003 (Вт) 19:28

>>В DX7<<

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

Сообщение Yurich » 07.10.2003 (Вт) 20:18

Maxwell писал(а):У меня кокой то баг, *.TGA как текстуру загрузил, объект почему то белый, не текстуриться. Закружаю *.BMP все работает.
Что за?

Увы, так и есть, белые. Видимо для загрузки текстур директ7 использует WinAPI и не косит формат TGA. Попробуй применить для текстуры LoadFromFile. Возможно еще понадобится Wrap.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 07.10.2003 (Вт) 20:54

Что то нифига не получается.
Может кто нибуть ещё знает или хотя бы, как это на DX8 делается? :(

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

Сообщение Yurich » 07.10.2003 (Вт) 21:02

Ща пробовал, и в SDK лазил. Ешкин кот! Только BMP или PPM. Что самим писать процедуру для загрузки?

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

Сообщение Yurich » 07.10.2003 (Вт) 21:33

Maxwell писал(а):Может кто нибуть ещё знает или хотя бы, как это на DX8 делается? :(

На восьмерке .TGA загружается легко:
Dim MtrlBuffer As D3DXBuffer ' универсальный кусок памяти
Dim i As Long
' загрузить Mesh из .х файла
Set Mesh = D3DX.LoadMeshFromX(App.Path & "\cube.x", D3DXMESH_MANAGED, _
D3DDevice, Nothing, MtrlBuffer, NumMaterials)


' распределить пространство для наших материалов и текстур
ReDim MeshMaterials(NumMaterials)
ReDim MeshTextures(NumMaterials)
Dim strTexName As String

' извлечь свойства материалов и имена текстур из MtrlBuffer
For i = 0 To NumMaterials - 1

' копировать материалы, используя d3dx функцию
D3DX.BufferGetMaterial MtrlBuffer, i, MeshMaterials(i)
' установить окружающий цвет для материала (D3DX не делает этого)
MeshMaterials(i).Ambient.r = 200
MeshMaterials(i).Ambient.g = 200
MeshMaterials(i).Ambient.b = 200
MeshMaterials(i).Ambient.a = 200

MeshMaterials(i).diffuse = MeshMaterials(i).Ambient
MeshMaterials(i).specular = MeshMaterials(i).Ambient

' создать текстуры
strTexName = D3DX.BufferGetTextureName(MtrlBuffer, i)
If strTexName <> "" Then
'Set MeshTextures(i) = D3DX.CreateTextureFromFileEx(D3DDevice, App.Path & "" & strTexName, 256, 256, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, &HFF000000, ByVal 0, ByVal 0)
Set MeshTextures(i) = D3DX.CreateTextureFromFileEx(D3DDevice, App.Path & "" & "Red.tga", 256, 256, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, &HFF000000, ByVal 0, ByVal 0)
End If


' установить материал и текстуру для этого подмножества
D3DDevice.SetMaterial MeshMaterials(i)
D3DDevice.SetTexture 0, MeshTextures(i)
Next i

Set MtrlBuffer = Nothing

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 08.10.2003 (Ср) 14:50

Я очень извиняюсь, Урич, ты бы не мог заглянуть на тему Сглаживание? :roll:

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 08.10.2003 (Ср) 17:00

Пример с DX8 ещё попробовать не успел.
Да кстате в DX7RM в 5 раз проще и кода мяньше. Ну немогу я поверить, что в DX7 нельзя каким то образом Alpha канал из *.TGA закрузить. Ведь там тоже есть BlendedTransparency. Может киким то другим мокаром попробовать?

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

Сообщение Yurich » 08.10.2003 (Ср) 19:21

Целиком и полностью согласен! Но что поделаешь, тянуться в хвосте паровоза? Делать ручками загрузку TGA (и еще кучу эффектов), а потом кусать локти по причине отсутствия поддержки семерки в десятке. Ведь об этом уже говорили, и она вроде не за горами! Чует моя задница, будет червонец 64-битным! Как азбука - семерка - класс! Но каждый день ловлю себя на мысли - уже не тот уровень! Пока меня беспокоят в восьмом две проблемы - искажение Х-моделей и ошибки в распознавании текстур.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 09.10.2003 (Чт) 17:55

Да Yurich, ты прав!
Спасибо тебе за кодик с текстурами, а Mikle за идею с *.TGA. Прозрачноть реальная! Какой в *.TGA сделаешь, такая и в DX8.
Соглашаюсь с вами, что DX8 лучьше, буду переходит на него.


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

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

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

    TopList