2010-05-09 11 views
3

Je suis à la recherche d'un tutoriel ou d'une documentation sur la façon de superposer direct3d sur un flux vidéo (webcam) dans DirectShow.Comment superposer Direct3D dans DirectShow

Je veux fournir une webcam virtuelle (un périphérique virtuel qui ressemble à une caméra Web au système (ie. De sorte qu'il soit utilisé où jamais une webcam normale pourrait être utilisé comme IM chat vidéo)

Je veux capturer un flux vidéo à partir d'une webcam connectée à l'ordinateur Je voulais superposer un modèle 3D sur le flux vidéo et le fournir comme sortie

J'avais prévu de le faire dans DirectShow uniquement parce que Si vous avez des idées sur des alternatives possibles, je suis tout ouïe

J'écris C++ en utilisant Visual Studio 2008.

Répondre

3

Utilisez le Video Mixing Renderer Filter pour rendre la vidéo à une texture, puis rendez-la dans la scène en quad. Après cela, vous pouvez rendre le reste de la substance 3D sur le dessus et ensuite présenter la scène.

1

Etes-vous après un filtre qui se trouve quelque part dans le graphique qui rend stuff D3D sur la vidéo?

Si tel est le cas, vous devez chercher à dériver un filtre à partir de CTransformFilter. Quelque chose comme l'exemple EZRGB vous donnera quelque chose à travailler. Fondamentalement, une fois que vous avez trié votre filtre doit faire le rendu Direct 3D et, littéralement, insérer l'image résultante dans le flux d'émission directe. Hélas vous ne pouvez pas rendre le Direct3D directement à une image vidéo d'émission directe, vous devrez donc faire votre rendu, puis verrouiller le tampon avant/arrière et copier les données 3D dans le flux d'émission directe. Ce n'est pas idéal car il sera assez lent (comparé au rendu D3D standard) mais c'est le meilleur que vous puissiez faire, à ma connaissance.

Modifier: À la lumière de votre mise à jour ce que vous voulez est assez compliqué. Vous devez créer un filtre source (vous devriez regarder l'exemple CPushSource) pour commencer. Une fois que vous avez fait cela, vous devrez l'enregistrer en tant que source de capture vidéo. Fondamentalement, vous devez faire cela en utilisant l'appel IFilterMapper2::RegisterFilter dans votre fonction DLLRegisterServer et transmettre un ID de classe "CLSID_VideoInputDeviceCategory". Ajouter le Direct3D sera comme je l'ai indiqué ci-dessus. Tout autour, vous voulez passer autant de temps à lire les exemples DirectShow dans le SDK de Windows et commencer à les modifier pour faire ce que vous voulez qu'ils fassent.