UE4在VR模式下去掉两侧黑边 - 纳金网
联系我们

给我们留言

联系我们

地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网

邮箱:info@narkii.com

电话:0595-82682267

(周一到周五, 周六周日休息)

当前位置:主页 > 3D教程 > 图文教程

UE4在VR模式下去掉两侧黑边

来源: 52vr | 责任编辑:传说的落叶 | 发布时间: 2019-06-11 08:36 | 浏览量:
正常用VR模式打开以后,就会成这样:
红框部分就是我所说的黑边
 

UE4在VR模式下去掉两侧黑边

 
通过改变代码,可以实现如下效果:
 

UE4在VR模式下去掉两侧黑边

 
我们同样要在编译版的UE4下操作,这样才能重新编译到源文件(UE4源文件下载和编译请参见我上一篇文章)
在SteamVRRender.cpp里的RenderTexture_RenderThread函数修改:
修改为:
 

[代码]:

01 void FSteamVRHMD::RenderTexture_RenderThread(FRHICommandListImmediate& RHICmdList, FTexture2DRHIParamRef BackBuffer, FTexture2DRHIParamRef SrcTexture) const
02
03     check(IsInRenderingThread()); 
04   
05     if (WindowMirrorMode == 0) 
06     
07         return
08     
09   
10     const uint32 ViewportWidth = BackBuffer->GetSizeX(); 
11     const uint32 ViewportHeight = BackBuffer->GetSizeY(); 
12   
13     SetRenderTarget(RHICmdList, BackBuffer, FTextureRHIRef()); 
14     RHICmdList.SetViewport(0, 0, 0, ViewportWidth, ViewportHeight, 1.0f); 
15   
16     RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI()); 
17     RHICmdList.SetRasterizerState(TStaticRasterizerState<>::GetRHI()); 
18     RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, cf_always="">::GetRHI()); 
19   
20     const auto FeatureLevel = GMaxRHIFeatureLevel; 
21     auto ShaderMap = GetGlobalShaderMap(FeatureLevel); 
22   
23     TShaderMapRef<fscreenvs> VertexShader(ShaderMap); 
24     TShaderMapRef<fscreenps> PixelShader(ShaderMap); 
25   
26     static FGlobalBoundShaderState BoundShaderState; 
27     SetGlobalBoundShaderState(RHICmdList, FeatureLevel, BoundShaderState, RendererModule->GetFilterVertexDeclaration().VertexDeclarationRHI, *VertexShader, *PixelShader); 
28   
29     PixelShader->SetParameters(RHICmdList, TStaticSamplerState<sf_bilinear>::GetRHI(), SrcTexture); 
30   
31     if (WindowMirrorMode == 1) 
32     
33         // need to clear when rendering only one eye since the borders won't be touched by the DrawRect below 
34         RHICmdList.Clear(true, FLinearColor::Black, false, 0, false, 0, FIntRect()); 
35   
36         RendererModule->DrawRectangle( 
37             RHICmdList, 
38             0, 0, 
39             ViewportWidth, ViewportHeight, 
40             0.0f, 0.3f, 
41             0.4f, 0.4f, 
42             FIntPoint(ViewportWidth, ViewportHeight), 
43             FIntPoint(1, 1), 
44             *VertexShader, 
45             EDRF_Default); 
46     
47     else if (WindowMirrorMode == 2) 
48     
49         RendererModule->DrawRectangle( 
50             RHICmdList, 
51             0, 0, 
52             ViewportWidth, ViewportHeight, 
53             0.0f, 0.0f, 
54             1.0f, 1.0f, 
55             FIntPoint(ViewportWidth, ViewportHeight), 
56             FIntPoint(1, 1), 
57             *VertexShader, 
58             EDRF_Default); 
59     
60 }  </sf_bilinear></fscreenps></fscreenvs></false,>
 
原理:https://forums.unrealengine.com/showthread.php?117032-Problem-about-monitor-resolution-display-in-vive-vr-mode
此链接里写得很清楚,就不复述了

相关文章
网友评论

您需要登录后才可以发帖 登录 | 立即注册

关闭

全部评论:0条

推荐
热门