当前位置: 代码迷 >> 多媒体/流媒体开发 >> DirectShow + Direct3D.解决方案
  详细解决方案

DirectShow + Direct3D.解决方案

热度:10510   发布时间:2013-02-26 00:00:00.0
DirectShow + Direct3D..
现在因项目限制,播放视频采用DirectShow + Direct3D的方式。。
一直没弄过Direct3D,所以临时啃了两天Direct3D...
在Graph链路中加入了VMR,是Renderless模式,然后用Direct3D贴纹理的方式绘制到屏幕上来...
问题是:现在用这种方式已经能播放一个视频了,现在需要实现两个半透明视频的叠加,有谁能给点提示么?
我想是既然Direct3D是逐帧贴纹理,那要叠加,是不是就是叠加每帧的纹理呀...
分数100,不够的话另开贴再加...
谢谢大家了...

------解决方案--------------------------------------------------------
VMR9Allocator的基础上写一个multi-graph的程序.现在程序中有两个graph,每个graph各包含一个VMR9。

你这里是两个文件流,但是一个Graph和一个一个Mixing Render
我把Blend打开过,用GraphEdit查看,里面只有一个Mixing Render ,两个Audio Render。

------解决方案--------------------------------------------------------
你现在这个问题已经完全在D3D这边,DShow提供纹理贴图(就是每桢的动画),现在使用D3D来把纹理进行混合.
在此之前需要确认几个问题:
1.是否是采用Alpha混合?
2.从DShow那里给出来的一张一张纹理是否带有Alpha通道?
3.如果没有Alpha通道采用什么样的算法进行混合?

对于D3D来说混合的方法有很多,可以
1.使用纹理Alpha混合,也就是纹理中带有Alpha信息
2.使用顶点的Alpha混合,也就是顶点带有Alpha信息
3.指定值进行Alpha混合,Alpha的值通过每桢设置获得
4.其它混合方式,比如加/减/乘等等

关键是要看你要实现什么效果
  相关解决方案