UE4在VR模式下去掉兩側(cè)黑邊
來(lái)源:
52vr |
責(zé)任編輯:傳說(shuō)的落葉 |
發(fā)布時(shí)間: 2019-06-11 08:36 | 瀏覽量:
正常用VR模式打開(kāi)以后,就會(huì)成這樣:
紅框部分就是我所說(shuō)的黑邊
通過(guò)改變代碼,可以實(shí)現(xiàn)如下效果:
我們同樣要在編譯版的UE4下操作,這樣才能重新編譯到源文件(UE4源文件下載和編譯請(qǐng)參見(jiàn)我上一篇文章)
在SteamVRRender.cpp里的RenderTexture_RenderThread函數(shù)修改:
修改為:
[代碼]:
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
此鏈接里寫得很清楚,就不復(fù)述了
-
分享到:
相關(guān)文章
網(wǎng)友評(píng)論
您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)
關(guān)閉
- 用戶名:
- 密 碼:
- 驗(yàn)證碼: 看不清? 點(diǎn)擊更換
- 忘記密碼?
全部評(píng)論:0條
推薦
熱門