Полупрозрачный спрайт

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

Модератор: Mikle

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Полупрозрачный спрайт

Сообщение GLEB » 28.12.2005 (Ср) 14:49

Вывожу спрайт на экран:

Код: Выделить всё
device.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, VERT2D(4), Len(VERT2D(0))


указав VERT2D.rhw=1

Как сделать чтобы он постепенно "растворялся" т. е. из непрозрачного полностью становился прозрачным.

Задавал альфу в материале - не прёт.

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

Сообщение Mikle » 28.12.2005 (Ср) 15:30

GLEB
Задавал альфу в материале - не прёт.

Задай нормально рендерстейты - попрет.

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 28.12.2005 (Ср) 18:33

Mikle писал(а):GLEB
Задавал альфу в материале - не прёт.

Задай нормально рендерстейты - попрет.

Какие???

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 29.12.2005 (Чт) 1:13

D3DDevice.SetRenderState D3DRSALPHABLENDENABLE,1
#define ROFL 0xDDDD

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 29.12.2005 (Чт) 7:28

D3DDevice.SetRenderState D3DRSALPHABLENDENABLE,1

Так это само сабой, в первую очередь поставил

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

Сообщение Mikle » 29.12.2005 (Чт) 15:10

AlphaOp = SelectArg1
AlphaArg1 = Diffuse
SrcBlend = SrcAlpha
DestBlend = InvSrcAlpha

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 29.12.2005 (Чт) 18:50

Да!Правильно Mikle.Я не успел...ты меня опередил.Тоже занимался этим, поэтому знаю!
#define ROFL 0xDDDD

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 01.01.2006 (Вс) 13:14

Все равно ничего не получается, материал и освещение вообще никак не влияют если rhw=1.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 02.01.2006 (Пн) 1:10

А ты поставь 0.5!
#define ROFL 0xDDDD

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Re: Полупрозрачный спрайт

Сообщение d3drm » 02.01.2006 (Пн) 4:06

GLEB писал(а):Вывожу спрайт на экран:

Код: Выделить всё
device.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, VERT2D(4), Len(VERT2D(0))


указав VERT2D.rhw=1

Как сделать чтобы он постепенно "растворялся" т. е. из непрозрачного полностью становился прозрачным.

Задавал альфу в материале - не прёт.


вот просто уточнить хотел, правильно ли то, что прорисовка примитивов начинается с 4ого вертекса? необычно как-то...
ХЎ

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 02.01.2006 (Пн) 10:12

Да это без разницы просто кусок кода вырезал.
можно так:
Код: Выделить всё
device.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, VERT2D(0), Len(VERT2D(0))

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

Сообщение Mikle » 02.01.2006 (Пн) 14:32

DirectXManiac
А ты поставь 0.5!

RHW тут никакой роли не играет.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 03.01.2006 (Вт) 1:11

Я просто на заметку! А вообще объясните что это такое?
#define ROFL 0xDDDD

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 03.01.2006 (Вт) 9:16

RHW=1 - сам толком не знаю что такое, но указав его =1 задается только x, y. Z=0. относительно экрана и тогда примитивы выводятся как двухмерные объекты.

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

Сообщение Mikle » 03.01.2006 (Вт) 11:18

GLEB
Когда в формате вертекса используется RHW - вертексы идут на экран без преобразований (приведенный формат вертекса), то есть не работает вертексный шейдер. Координаты X и Y получаются в пикселях, а Z - в глубину. Значение Z от 0 до 1, преобразования (WORLD, VIEW, PROGECTION и т. п.) не работают. Так же не работает вертексный свет. Не работает также и материал. Это не зависит от величины RHW, это зависит от его ИСПОЛЬЗОВАНИЯ. Чтобы в таком формате использовать диффузную прозрачность, нужно прописывать цвет прямо в вертексы. Фактически работа вертексного шейдера заключается в преобразовании вертекса из пользовательского в приведенный формат.

Использование приведенного формата - самый быстрый способ, но неудобный. Я предпочитаю для 2D использовать изометрическую проекцию, там работает все.
А RHW определяет линейность интерполяции величин (цвет, текстурные координаты...)между вертексами.
Сделай треугольник с вершинами разного цвета и разными RHW - все наглядно станет понятно.

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 03.01.2006 (Вт) 11:43

Чтобы в таком формате использовать диффузную прозрачность, нужно прописывать цвет прямо в вертексы.


Код: Выделить всё
Public Type Vertex2D
   pos as d3dvector
   tu as single
   tv as single
   rhw as single
   color as single ' <--- здесь цвет задавть ?
end type

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

Сообщение Mikle » 03.01.2006 (Вт) 12:04

Цвет Single :shock: :shock: :shock:
Код: Выделить всё
Public Type Vertex2D
   pos as d3dvector
   rhw as single
   color as long
   tu as single
   tv as single
end type

Поля в формате вертекса задаются в строгом порядке - есть в SDK.

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 03.01.2006 (Вт) 12:20

Цвет задается, а прозрачность как :?: :?: :?: :?:

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

Сообщение Mikle » 03.01.2006 (Вт) 16:47

GLEB
Четвертый байт в цвете - это прозрачность.

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 03.01.2006 (Вт) 19:29

Я цвет задаю через D3DColorRGBA.
Четвертый байт в цвете - это прозрачность.

А можно по подробнее...

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 04.01.2006 (Ср) 1:15

D3DColorRGBA(r,g,b,a) так?
Так вот a(alpha) это и есть прозрачность!
#define ROFL 0xDDDD

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 05.01.2006 (Чт) 8:10

Ну это ничего не меняет.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 06.01.2006 (Пт) 1:36

Device.SetRenderState D3DRS_SRCBLEND, D3DBLEND_ONE
Device.SetRenderState D3DRS_DESTBLEND, D3DBLEND_ONE
Device.SetRenderState D3DRS_ALPHABLENDENABLE, 1

Попробуй так.У меня получалось! Только не забудь после рендеринга
Device.SetRenderState D3DRS_ALPHABLENDENABLE, 0
!!!!!!!! :wink:
#define ROFL 0xDDDD

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 06.01.2006 (Пт) 9:37

Я предпочитаю для 2D использовать изометрическую проекцию, там работает все

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

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 07.01.2006 (Сб) 1:03

Алоо! Тебе помогло??? Я же написал как!
#define ROFL 0xDDDD

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 07.01.2006 (Сб) 11:32

Нет не помогло!

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

Сообщение Mikle » 07.01.2006 (Сб) 11:49

Пример:

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 07.01.2006 (Сб) 12:27

Спасибо, Mikle

D3DXMatrixOrthoLH Mtrx, 4, 3, 0, 2
Скажи пожалуйста, что за параметры - 4, 3, 0, 2
Первые 2 параметра вроде как width и height - но почему именно 4 и 3 при др. знач. картинка непропорциональная.

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

Сообщение Mikle » 07.01.2006 (Сб) 15:31

4 и 3 соответствуют пропорциям формы. Поставь 8 и 6 - изменится масштаб.
0 и 2 - это ограничение по Z, ближний и дальний планы.

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 07.01.2006 (Сб) 15:35

Теперь понятно, спасибо


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

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

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

    TopList