首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

DirectShow + Direct3D.解决方案

2012-03-16 
DirectShow + Direct3D..现在因项目限制,播放视频采用DirectShow + Direct3D的方式。。一直没弄过Direct3D,

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.其它混合方式,比如加/减/乘等等

关键是要看你要实现什么效果

热点排行