如何在directshow中叠加direct3d

问题描述:

我正在寻找关于如何在directshow中将视频(网络摄像机)馈送叠加到direct3d上的教程或文档。如何在directshow中叠加direct3d

我想提供一个虚拟的网络摄像头(看起来像一个网络摄像头的系统(即一个虚拟设备。因此,它被用在以往正常的网络摄像头可以像IM视频聊天使用)

我想从连接到计算机的网络摄像头捕捉视频源 我想在视频源顶部覆盖一个3d模型并将其作为输出提供

我曾计划在directshow中这样做,它看起来可能做到这一点,如果你对可能的替代方案有任何想法,我全力以赴。我正在使用visual studio 2008编写C++。

使用Video Mixing Renderer Filter将视频渲染到纹理,然后将其渲染为全屏四边形。之后,您可以将其余的3D内容渲染到顶部,然后呈现场景。

您是否在图形中的某个位置放置了一个过滤器,该过滤器将D3D渲染到视频上?

如果是这样,那么你需要看看从CTransformFilter派生出一个过滤器。像EZRGB的例子会给你一些工作。基本上,一旦你有这种排序你的过滤器需要做直接3D渲染,并从字面上,将结果图像插入直接显示流。唉,您无法将Direct3D直接渲染到直接显示视频帧,因此您必须执行渲染,然后锁定前/后缓冲区,并将3D数据复制到直接显示流中。这是不理想的,因为它会很慢(与标准的D3D渲染相比),但是据我所知它是最好的。

编辑:根据你的更新,你想要的是相当复杂的。您需要创建一个源过滤器(您应该查看CPushSource示例)以开始。完成之后,您需要将其注册为视频捕获源。基本上你需要通过在你的DLLRegisterServer函数中使用IFilterMapper2::RegisterFilter调用并传入一个类ID“CLSID_VideoInputDeviceCategory”。添加Direct3D将如上所述。

您想要花费尽可能多的时间阅读Windows SDK中的DirectShow示例并开始修改它们以执行您希望它们执行的操作。