2015-11-02 133 views
3

这适用于虚幻引擎4.9UE4:输出游戏帧到文件

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

对于我做了一个简单的演示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,但那不是我想要做的。我想在运行时自动执行此操作。

我该怎么办?它甚至有可能吗?

+1

从我的问题中应该很明显我已经Google了这个。如果你已经找到更具体的东西来展示如何用代码或蓝图做到这一点,那么请分享它,而不是张贴讽刺意见。 – pookie

回答

4

对于任何想要这样做的人,您有几个选项。

选项A

如果你不在乎多少截图文件生成并不在乎他们叫什么,那么你可以使用一个蓝图:

enter image description here

图像将输出到\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文档