游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3291|回复: 2

(VMR9)如何在3D程序中嵌入视频播放

[复制链接]

1

主题

2

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2014-9-18 20:02:55 | 显示全部楼层 |阅读模式
需求是在UI层上插入一块区域以播放视频,因为这个UI是用3D渲染的,其实就是在3D的纹理上输出视频。
目前是用directShow中的VMR9做的,参照winSDK7.1\DirectShow里的VMR9Allocator这个示例程序,不同的是它是在视频帧输出的时候就渲染到面上去,我这里因为UI本身使用一个控制台统一渲染,所以不能在VMR9输出帧(PresentImage)的时候直接渲染,只能将这个函数里的lpPresInfos.lpSurf使用StretchRect复制到UI的Texture中等UI需要渲染时再使用这个Texture。
然后因为这个StretchRect本身的限制,需要将Texture设置为USAGE_RenderTarget,我在VMR9将视频帧输出到UI本身的纹理上时将这个纹理保存为图片,此时这个纹理确实是视频中的内容。但是在UI使用这个纹理进行渲染时会发现这个纹理已经被改得面目全非了,是不是设置为RenderTarget的纹理可能被DX修改?
有没有对DirectShow熟悉的大神帮忙解释一下,或者有什么别的方式可以实现这种在3D的UI上播放视频的功能?

5

主题

84

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2014-9-18 22:37:09 | 显示全部楼层
我倒是有一个想法,把视频转换成自己的引擎支持的视频格式,然后直接用引擎的接口来播放;

或者用工具把视频的每一帧都提取出来,然后转换成 bmp 或者 png 之类的再打包,然后播放的时候逐个画面提取,然后创建成纹理渲染上去;

1

主题

2

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2014-9-19 19:10:43 | 显示全部楼层
已经解决了,http://blog.csdn.net/foruok/article/details/2719724这里给出的这篇文章http://www.gamedev.net/community/forums/topic.asp?topic_id=455515就恰好是讲我这个问题的,直接使用就可以了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-26 02:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表