我必须开发一个应用程序,最后一步是导出由我的软件生成的3D动画的视频(或单帧)计算用户输入参数。
我想使用XNA并为此。我需要软件可以导出FIXED FPS视频(或者单独输出视频的所有单帧)。这不是LIVE FPS的问题。我不需要在屏幕上以固定的fps查看帧。由于动画可能非常复杂,我可以接受,如果软件每帧需要1分钟。
重要的是我可以在渲染时看到框架,并且不会跳过任何框架。 例如。如果视频是1分钟长,它还必须以24fps导出24帧,如果它需要20秒来渲染每帧。在渲染第一帧之后(所以在20秒之后)它不再在21秒处渲染帧。它必须渲染帧[第一分钟的2/24]
我怎样才能获得这个?
谢谢!
答案 0 :(得分:1)
以下是为XNA 4.0执行此操作的方法,在Game
类的代码中描述(因为对我来说很容易):
protected override void Update(GameTime gameTime)
{
// Do Nothing!
}
void RealUpdate()
{
const float deltaTime = 1f/60f; // Fixed 60 FPS
// Update your scene here
}
RenderTarget2D screenshot;
protected override void LoadContent()
{
screenshot = new RenderTarget2D(GraphicsDevice, width, height, false, SurfaceFormat.Color, null);
}
protected override void UnloadContent()
{
screenshot.Dispose();
}
int i = 0;
protected override void Draw(GameTime)
{
RealUpdate(); // Do the update once before drawing each frame.
GraphicsDevice.SetRenderTarget(screenshot); // rendering to the render target
//
// Render your scene here
//
GraphicsDevice.SetRenderTarget(null); // finished with render target
using(FileStream fs = new FileStream(@"screenshot"+(i++)+@".png", FileMode.OpenOrCreate)
{
screenshot.SaveAsPng(fs, width, height); // save render target to disk
}
// Optionally you could render your render target to the screen as well so you can see the result!
if(done)
Exit();
}
注意:我在没有编译或测试的情况下写了这个 - 所以可能会有一两个小错误。