Как наложить direct3d в directshow

Я ищу руководство или документацию о том, как наложить direct3d поверх видео (веб-камеры) в directshow.

Я хочу предоставить виртуальную веб-камеру (виртуальное устройство, которое выглядит как веб-камера для системы (т. Е. Чтобы его можно было использовать везде, где можно было бы использовать обычную веб-камеру, например, в видеочатах для обмена мгновенными сообщениями))

Я хочу записать видеопоток с веб-камеры, подключенной к компьютеру. Я хочу наложить 3D-модель поверх видеопотока и предоставить это в качестве вывода.

Я планировал сделать это в directshow только потому, что это казалось возможным в нем. Если у вас есть какие-либо идеи о возможных альтернативах, я все слышу.

Я пишу на С ++, используя Visual Studio 2008.


person Mr Bell    schedule 09.05.2010    source источник


Ответы (2)


Для рендеринга видео в текстуру, а затем визуализировать его в сцене как полноэкранный четырехугольник. После этого вы можете визуализировать остальную часть 3D-материала поверх, а затем представить сцену.

person Axel Gneiting    schedule 15.05.2010

Вы ищете фильтр, который находится где-то на графике, который отображает материал D3D поверх видео?

Если это так, то вам нужно взглянуть на получение фильтра из CTransformFilter. Что-то вроде примера EZRGB даст вам возможность работать. Как правило, после того, как вы это отсортировали, ваш фильтр должен выполнить прямой 3D-рендеринг и буквально вставить полученное изображение в поток прямого показа. Увы, вы не можете визуализировать Direct3D непосредственно в кадре прямого показа видео, поэтому вам придется выполнить рендеринг, затем заблокировать передний / задний буфер и скопировать 3D-данные в прямой поток шоу. Это не идеально, поскольку это БУДЕТ довольно медленным (по сравнению со стандартным рендерингом D3D), но, насколько мне известно, это лучшее, что вы можете сделать.

Изменить: в свете вашего обновления то, что вы хотите, довольно сложно. Для начала вам нужно создать фильтр источника (вы должны посмотреть пример CPushSource). Как только вы это сделаете, вам нужно будет зарегистрировать его как источник видеозахвата. Обычно это нужно делать с помощью IFilterMapper2: : RegisterFilter вызовите в своей функции DLLRegisterServer и передайте идентификатор класса "CLSID_VideoInputDeviceCategory". Добавление Direct3D будет таким, как я сказал выше.

В любом случае, вы хотите потратить как можно больше времени на чтение примеров DirectShow в Windows SDK и начать изменять их, чтобы они делали то, что ВЫ хотите, чтобы они делали.

person Goz    schedule 10.05.2010