私は非常に単純な DirectX11 レンダリング エンジンにしばらく取り組んでいました。今日、Oculus Rift 統合のためにステレオ レンダリング (シーンを 2 回レンダリングしてテクスチャにする) をセットアップすることができました。
【現在】 現在 、私が基本的に行っていることは次のとおりです。
- 1280 x 800 のウィンドウがあります
- シーン全体を RenderTargetViewLeft_ (1280 x 800) にレンダリングします。
- RenderTargetViewLeft_ のコンテンツを「EyeWindow」として (チュートリアルのように) 画面の左側 (640 x 800) にレンダリングします。
- シーン全体を RenderTargetViewRight_ (1280 x 800) にレンダリングします。
- RenderTargetViewRight_ のコンテンツを「EyeWindow」として (チュートリアルのように) 画面の右側 (640 x 800) にレンダリングします。
これまでのところすべてが機能しているため、シーンを 2 回レンダリングして別々のテクスチャにし、最終的に分割画面にしました。
[DirectX11 レンダリング ループ]
bool GraphicsAPI::Render()
{
bool result;
// [Left Eye] The first pass of our render is to a texture now.
result = RenderToTexture(renderTextureLeft_);
if (!result)
{
return false;
}
// Clear the buffers to begin the scene.
BeginScene(0.0f, 0.0f, 0.0f, 1.0f);
// Turn off the Z buffer to begin all 2D rendering.
TurnZBufferOff();
// Render The Eye Window orthogonal to the screen
RenderEyeWindow(eyeWindowLeft_, renderTextureLeft_);
// Turn the Z buffer back on now that all 2D rendering has completed.
TurnZBufferOn();
// [Right Eye] ------------------------------------
result = RenderToTexture(renderTextureRight_);
if (!result)
{
return false;
}
TurnZBufferOff();
RenderEyeWindow(eyeWindowRight_, renderTextureRight_);
TurnZBufferOn();
// [End] Present the rendered scene to the screen.
EndScene(); // calls Present
return true;
}
【今やりたいこと】Oculus SDK で Barrel Distortion を実現しようとしています。現在、私は 2 番目のイメージの別の仮想カメラについて心配していません。今のところバレルの歪みを実現したいだけです。
開発者ガイド [1] を読み、TinyRoom Demo も調べてみましたが、既に動作している DirectX エンジンで SDK を使用して歪みを実現するために何が必要かを完全には理解していません。
Developers Guide Render Texture Initializationでは、API のテクスチャを作成する方法を示しています。つまり、すべての RendertargetViews を適切な API サイズ (現在のレンダー ターゲットのサイズは 1280 x 800) でセットアップする必要があるということです。
レンダリング ループは次のようになります。
ovrHmd_BeginFrame(hmd, 0);
BeginScene(0.0f, 0.0f, 0.0f, 1.0f);
...
// Render Loop as the Code above
...
ovrHmd_EndFrame(hmd, headPose, EyeTextures);
// EndScene(); // calls Present, not needed on Oculus Rendering
私は何かが足りないと感じているので、すべてが正しいわけではないと確信しています。
[更新] そこで、Oculus API を使用して、バレルの歪みでシーンをレンダリングすることに成功しました。左と右のイメージのポリゴンが離れすぎていますが、これはレンダー ターゲットにデフォルトの 1280 x 800 テクスチャ サイズを使用していることが原因である可能性があります。HMD を移動すると、CameraStream も画面に直交してレンダリングされないように見えます。さらにテストを行います;)
[1] - Oculus 開発者ガイド: https://developer.oculus.com/documentation/