我必须开发一个应用程序,其中最后一步是导出由我的软件计算用户输入参数生成的3D动画的视频(或单帧)。
我想使用XNA来实现这一点。我需要的是该软件可以导出固定的FPS视频(或也可以单独视频的所有单帧)。这不是实况FPS的问题。我不需要在屏幕上以固定的fps查看帧。由于动画可以是非常复杂的,我可以接受,如果软件需要每一帧1分钟。
重要的是,我可以在渲染时看到帧,并且不会跳过任何帧。例如:如果视频是1分钟长,如果渲染每帧需要20秒,则必须以24fps的速度导出24帧。在渲染第一帧之后(所以在20秒之后),它不需要在21秒渲染帧。它必须渲染第一分钟的第2/24帧
我如何才能获得它?
谢谢!
发布于 2010-09-01 20:02:12
下面是用于XNA4.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();
}注意:我在没有编译或测试的情况下写了这篇文章--所以可能有一两个小错误。
https://stackoverflow.com/questions/3616232
复制相似问题