【问题标题】:UE4: output game frames to fileUE4:将游戏帧输出到文件
【发布时间】:2016-02-02 23:44:41
【问题描述】:

这适用于虚幻引擎 4.9

每一帧,我都想将它保存到文件中(覆盖现有的)。

对于我制作的一个简单的 D3D11 演示,我已经能够做到这一点:

void Engine::CaptureFrame(D3DX11_IMAGE_FILE_FORMAT format, const LPCTSTR fileName){

    backbuffer->GetResource(&resource);
    ID3D11Texture2D* texture;
    HRESULT hResult = resource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<LPVOID*>(&texture));
    D3DX11SaveTextureToFile(deviceContext, texture, format, fileName);

    //Clean up
    texture->Release();
    resource->Release();
}

我也用 OpenGL 完成了这项工作,使用了一个名为“FreeImage”的库。

我不想修改 UE4 源,我正在寻找一种方法来“挂钩”到 UE4 并“捕获”帧。

我已经设法使用Open Broadcasting Software 做到了这一点,但我想在 UE4 中通过 c++ 或蓝图本地做到这一点。

我也知道I can do this from the editor,但这不是我想做的。我想在运行时自动执行此操作。

我该怎么办?有没有可能?

【问题讨论】:

  • 从我的问题中应该很明显我已经用谷歌搜索过了。如果您发现了一些更具体的东西来展示如何使用代码或蓝图做到这一点,那么请分享它而不是发布讽刺的 cmets。

标签: c++ unreal-engine4


【解决方案1】:

对于其他想要这样做的人,您有几个选择。

选项 A

如果你不关心生成了多少截图文件,也不关心它们叫什么,那么你可以使用蓝图:

图像将输出到\Unreal Projects\ProjectName\Saved\Screenshots\Windows,其中ProjectName 是您的项目名称。

选项 B

如果您不想要多个屏幕截图文件并且需要控制它们的去向,那么您可以通过代码执行此操作:

//Called every frame
void AMyDempActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    FString filename = "test.png";
    FScreenshotRequest::RequestScreenshot(filename, false, false);

}

这是FScreenshotRequest上的文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2014-10-24
    • 2020-09-02
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多