Mus*_*sis 2 c# directx animation windows-media-player
我正在用C#/ WinForms编写动画应用程序(请参阅此问题).基本上,我的应用程序中的动画是流畅的,但显示撕裂效果; 当我拍摄相同的动画并将其渲染为AVI文件并使用Windows Media Player播放时,动画完全没有撕裂效果.我知道WMP没有改变帧速率,因为动画与音乐同步.
我假设WMP使用DirectX或其他一些了解显示器刷新率和扫描线位置等的技术,但我总是认为编程到刷新率会限制帧速率.显然,WMP并非如此.
有没有人知道WMP(或其他视频播放器)如何在内部呈现视频?我搜索过,但似乎无法找到任何关于此的细节.
我做了任何DirectX编程已经有一段时间了,所以这可能已经过时了.
根据我的记忆,使用DirectX,您可以设置一个翻转的缓冲区链,通常是三个缓冲区:显示的缓冲区,要显示的缓冲区和写入的缓冲区.在更新时,DirectX将在更新显示的缓冲区之前等待V-sync.现在,这将导致显示的图像与应该显示的图像之间存在差异,但这最多只能刷新一次,大约是1/60秒,因此您不太可能注意到.
一些ASCII艺术来表明我的意思:
|-|-|-|-|-|-|-|-|-|-|-|-|-|-| - screen refresh
|----|----|----|----|----|--- - animation
|-----|---|-----|---|-----|-- - displayed
Run Code Online (Sandbox Code Playgroud)