トップページ > 記事閲覧
openXRとの連携について
名前:猫の湯飲み 日時: 2023/08/03 23:31

3D11BackBufferTexture2Dの取得に関して質問をした猫の湯飲みです。 小刻みに揺れる現象の原因は特定できていませんが steamVRとライブラリと機器の相性によって変な挙動をする事があると聞いたのでopenXRに移行することにしました。 しかしopenXRはsteamVRのように3D11BackBufferTexture2Dを渡すわけでは無いので難儀しています DirectX11について勉強し始めたばかりなのでおかしなところがあればすみません。よろしくお願いいたします。 1.openXRはグラフィックAPIと密接に連携しているため以下のように  XrGraphicsRequirementsD3D11KHR graphicsRequirements{ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR };  CHECK_XRCMD(pfnGetD3D11GraphicsRequirementsKHR(instance, systemId, &graphicsRequirements));  const ComPtr<IDXGIAdapter1> adapter = GetAdapter(graphicsRequirements.adapterLuid);  openXR側が指定したアダプターのローカル一意識別子(LUID)を使用する事が推奨されています。一応openXRに指定されたLUIDでなくても正常に動きますが  DXライブラリの初期化時にLUIDを指定するようなことは出来ないでしょうか? 2.openXRが出力した内容を元にRenderTargetViewを作成し、描画しなければならないため  SetDrawScreen_ID3D11RenderTargetViewを使用したいのですが  SetDrawScreen_ID3D11RenderTargetViewでvr用のRenderTargetViewに描画先を変更した後、  DXライブラリが管理しているRenderTargetViewに戻す?ような機能は無いのでしょうか
メンテ

Page: 1 |

Re: openXRとの連携について ( No.1 )
名前:管理人 日時:2023/08/04 01:38

> 一応openXRに指定されたLUIDでなくても正常に動きますが > DXライブラリの初期化時にLUIDを指定するようなことは出来ないでしょうか? LUID を指定する機能は無かったので追加しました よろしければこちらの暫定最新バージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // 使用する IDXGIAdapter の LUID を設定する // ( DxLib_Init の呼び出し前にのみ実行可能 ) int SetUseDirect3D11AdapterLUID( LUID *UseLUID ) ; LUID を引数に渡すと、DXライブラリが指定の LUID を持つ IDXGIAdapter を使用します よろしければお試しください m(_ _)m > SetDrawScreen_ID3D11RenderTargetViewでvr用のRenderTargetViewに描画先を変更した後、 > DXライブラリが管理しているRenderTargetViewに戻す?ような機能は無いのでしょうか SetDrawScreen( DX_SCREEN_BACK ) ; ↑ こちらのように SetDrawScreen を使用して頂ければ描画先はDXライブラリが作成した グラフィックハンドルや裏画面・表画面に戻ります
メンテ
Re: openXRとの連携について ( No.2 )
名前:猫の湯飲み 日時:2023/08/05 01:29

SetUseDirect3D11AdapterLUID を使用することによってopenXRの初期化が早くなり、GPUが2つある場合(内蔵グラフィックが有効)でも安定して動くようになりました ありがとうございました。 一つ質問なのですが以下のようにDirectX11でビューポートをRSSetViewportsで設定するのを DXライブラリで設定する場合、CD3D11_VIEWPORTをDxLib::MATRIXの形に変換した後、SetTransformToViewportで設定すればいいのでしょうか? CD3D11_VIEWPORT viewport((float)layerView.subImage.imageRect.offset.x, (float)layerView.subImage.imageRect.offset.y, (float)layerView.subImage.imageRect.extent.width, (float)layerView.subImage.imageRect.extent.height); m_deviceContext->RSSetViewports(1, &viewport);
メンテ
Re: openXRとの連携について ( No.3 )
名前:管理人 日時:2023/08/06 02:12

SetUseDirect3D11AdapterLUID が正常に動作したようで何よりです > 一つ質問なのですが以下のようにDirectX11でビューポートをRSSetViewportsで設定するのを > DXライブラリで設定する場合、CD3D11_VIEWPORTをDxLib::MATRIXの形に変換した後、SetTransformToViewportで設定すればいいのでしょうか? DXライブラリ内で RSSetViewports を呼んでいるのは SetDrawArea 内となりますので、 SetTransformToViewport を使用しても RSSetViewports は呼ばれません SetDrawArea( layerView.subImage.imageRect.offset.x, layerView.subImage.imageRect.offset.y, layerView.subImage.imageRect.offset.x + layerView.subImage.imageRect.extent.width, layerView.subImage.imageRect.offset.y + layerView.subImage.imageRect.extent.height ); ↑ このようにすると内部で RSSetViewports が呼ばれます
メンテ
Re: openXRとの連携について ( No.4 )
名前:猫の湯飲み 日時:2023/08/17 23:59

返信が大変遅れてしまい申し訳ありません。 SetDrawAreaを使用してopenXR経由でHMDに描画したところ正常に描画出来ました。 またsteamVRを経由して描画した際に起きる小刻みに揺れる現象が無くなりました。 丁寧に教えていただきありがとうございました
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存