首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XNA渲染3D视频(固定FPS!)

XNA渲染3D视频(固定FPS!)
EN

Stack Overflow用户
提问于 2010-09-01 16:31:47
回答 1查看 3.9K关注 0票数 1

我必须开发一个应用程序,其中最后一步是导出由我的软件计算用户输入参数生成的3D动画的视频(或单帧)。

我想使用XNA来实现这一点。我需要的是该软件可以导出固定的FPS视频(或也可以单独视频的所有单帧)。这不是实况FPS的问题。我不需要在屏幕上以固定的fps查看帧。由于动画可以是非常复杂的,我可以接受,如果软件需要每一帧1分钟。

重要的是,我可以在渲染时看到帧,并且不会跳过任何帧。例如:如果视频是1分钟长,如果渲染每帧需要20秒,则必须以24fps的速度导出24帧。在渲染第一帧之后(所以在20秒之后),它不需要在21秒渲染帧。它必须渲染第一分钟的第2/24帧

我如何才能获得它?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-01 20:02:12

下面是用于XNA4.0的方法,在Game类的代码中进行了描述(因为它对我来说很容易):

代码语言:javascript
复制
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();
}

注意:我在没有编译或测试的情况下写了这篇文章--所以可能有一两个小错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3616232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档