Слоеное окно Direct3D

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

Модератор: Mikle

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Слоеное окно Direct3D

Сообщение The trick » 28.09.2014 (Вс) 23:13

Изображение
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось The trick 29.09.2014 (Пн) 18:08, всего редактировалось 2 раз(а).
UA6527P

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

Re: Слоеное окно Direct3D

Сообщение Mikle » 29.09.2014 (Пн) 8:38

У меня не работает альфа. Пока не разбирался в чём причина, ты там сурово намешал DirectX и WinAPI :)
Там есть одна ошибка, которая, кажется, и у меня в книге есть, она и в DX8VBSDK есть:
Код: Выделить всё
d3dpp.EnableAutoDepthStencil = True

Должно быть:
Код: Выделить всё
d3dpp.EnableAutoDepthStencil = 1

Это касается не только DepthStencil, а вообще всех функций с булевскими параметрами, я уже встречал видеокарты/драйвера, которые такое криво обрабатывают.
У вас нет доступа для просмотра вложений в этом сообщении.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Слоеное окно Direct3D

Сообщение The trick » 29.09.2014 (Пн) 8:45

Спасибо за подсказку, делал по твоей книге. Альфа может не работать из-за того что в буфер пишется всегда 255 на альфа канал, хотя формат стоит D3DFMT_A8R8G8B8. Возможно что Clear пишет туда 255. Если попробовать черный цвет записать, также остается фон? Проблема в том что у меня все нормально отображается.
GDI я задействовал только для снятия скриншота.
Я кажется понял в чем проблема была (я использовал белый фон, но домножение на альфу не делал, поэтому у меня там значение цвета хранилось в виде 0x00FFFFFF, а для альфа-смешивания нужно чтобы было 0x00000000, т.е. альфу умножаем на цвет. Я сделал черный цвет фона, дабы не умножать каждый пиксел), исправил перезалил.
UA6527P

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

Re: Слоеное окно Direct3D

Сообщение Mikle » 29.09.2014 (Пн) 13:19

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

И я до этого уже докопался.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Слоеное окно Direct3D

Сообщение The trick » 29.09.2014 (Пн) 13:48

Майкл, на шейдерах можно сразу сделать доумножение альфы на цвет? И вообще более производительно ли будет использовать шейдеры в этой задаче или без разницы?
UA6527P

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

Re: Слоеное окно Direct3D

Сообщение Mikle » 29.09.2014 (Пн) 14:20

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

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Слоеное окно Direct3D

Сообщение The trick » 29.09.2014 (Пн) 18:07

Спасибо.Попробую сделать на шейдерах, иначе для имитации полупрозрачности придется каждый пиксель домножать в VB.
Кстати, имелся какой-то баг, на некоторых картах не работал SetRenderTarget, заменил на CreateRenderToSurface. Перезалил туда же.
UA6527P

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

Re: Слоеное окно Direct3D

Сообщение Mikle » 29.09.2014 (Пн) 18:17

Кривоус Анатолий писал(а):Попробую сделать на шейдерах, иначе для имитации полупрозрачности придется каждый пиксель домножать в VB.

А кто мешает использовать SetTextureStageState 0, D3DTSS_ALPHAOP...?
Кривоус Анатолий писал(а):на некоторых картах не работал SetRenderTarget, заменил на CreateRenderToSurface

Тут когда-то эта тема обсуждалась - в dx8vb.dll что-то накосячили и SetRenderTarget косячит.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Слоеное окно Direct3D

Сообщение The trick » 29.09.2014 (Пн) 18:40

Mikle писал(а):А кто мешает использовать SetTextureStageState 0, D3DTSS_ALPHAOP...?

Спасибо. Нужно подумать как организовать.
UA6527P


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

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

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

    TopList