Snapdragon Spaces 開発ガイド (13)


6.3.2.2 ハンドトラッキングインタラクション

このセクションでは、ハンド トラッキングと対話するために必要なさまざまなアクターとコンポーネントについて説明します。

警告
ハンド トラッキング インタラクションは、ハンド トラッキング サンプルだけでなく、プロジェクトのすべてのサンプルでも使用されます。これにより、ユーザーはハンド トラッキングと対話できるウィジェット キャラクターや 3D キャラクターと対話できるようになります。

6.3.2.2.1 空間ジェスチャ入力マネージャーの役​​割

これは、ハンド トラッキング インタラクションに使用する非常に重要な役割です。ハンド トラッキングを入力モードとして設定するには、このキャラクターをレベルに追加する必要があります。このキャラクターをスポーンするには、クラス ノードの Spawn Actorを使用することをお勧めします。

ここに画像の説明を挿入

警告
このキャラクターをレベルに追加またはスポーンする前に、ハンド トラッキングが利用可能であることを必ず確認してください。ここに画像の説明を挿入

コントロール ジェスチャ入力マネージャー アクターは、ジェスチャをリアルタイムでリッスンし、デリゲートを使用してそれらのジェスチャに基づいてアクションを報告する責任があります。ASpacesHandInteractionインタラクションを実行するために必要なクラスの 2 人の参加者 (各手に 1 人) を生成して保持します。次のセクションでは、このクラスでアクセスして使用できるさまざまな変数と関数をリストします。

6.3.2.2.1.1 変数
  • FOnSpacesHandPinch OnSpacesHandPinchLeftAnd FOnSpacesHandPinch OnSpacesHandPinchRight: デリゲートを起動して、ピンチ ジェスチャの状態を通知します。
  • FOnSpacesHandOpen OnSpacesHandOpenLeftand FOnSpacesHandOpen OnSpacesHandOpenRight: ピンチ ジェスチャの状態について通知されるようにデリゲートを起動します。
  • FOnSpacesHandGrab OnSpacesHandGrabLeftAND FOnSpacesHandGrab OnSpacesHandGrabRight: デリゲートを起動して、グラブ ジェスチャの状態を通知します。
  • FOnSpacesHandInteractionStatusUpdated OnSpacesHandInteractionStatusUpdated: 手のインタラクション状態が更新されたときにトリガーされるデリゲート。ブール値で状態を通知します。
  • TSubclassOf < ASpacesHandInteraction > HandInteractionClass:空间手部交互角色ハンド インタラクション キャラクターとして生成されるサブクラス。
  • FVector LeftRayPositionOffsetおよびFVector RightRayPositionOffset: 2 人の手で対話するキャラクターのライト オフセット。
  • float RayDistance: 手を触れ合う 2 人のキャラクター間の光の距離。
6.3.2.2.1.2 機能
  • ASpacesHandInteraction* GetHandLeftInteraction() constおよびASpacesHandInteraction* GetHandRightInteraction() const: ハンド インタラクション文字を取得するために使用されます。
  • void SetHandInteractionState(bool active): ハンド インタラクションを有効または無効にするために使用されるこの機能は、すべてのハンド インタラクション システムに影響します。手の操作はデフォルトでは無効になっています。
  • void GetHandInteractionState() const: ハンド インタラクション システムの状態を返します。

ヒントコントロール ジェスチャを使用してマネージャー ロールに入る方法については、(「SnapdragonSpacesSamples Content」>「SnapdragonSpaces」>「Common」>「Core」>「Components」の下)を
参照してください。BP_HandTrackingControllerComponent

6.3.2.2.2 空間ハンドインタラクションキャラクター

Spaces Hand Interactionキャラクターは、3D ウィジェットや他のタイプのキャラクターなど、レベル内に存在するさまざまなハンド インタラクティブ要素と対話する役割を果たします。空間ハンド インタラクション キャラクターには、ファーハンド インタラクション (シーン要素に対してレイキャストを実行します) とニアハンド インタラクション (インタラブル キャラクターに手が触れたときにアクティブ化される) が含まれます。空間的な手のインタラクション キャラクターは、ユーザーが指定した手から始まる光線によって表現されます。この光線は、近接相互作用が使用されない限り、常に表示されます。ライトには 2 つのインタラクション モードがあります。アクティブ (シーン内の手でインタラクト可能なキャラクターに光線が当たったとき) または非アクティブです。この2つのモードに応じてライトの色と長さが変わります。UI を操作するには、遠端操作とピンチ ジェスチャを使用します。

ヒント
Unreal Engine の Snapdragon Spaces サンプル プロジェクトでは、両手に 1 つずつ、手势输入管理器2 種類のアクターが生成されます。つまり、シーンに追加するだけで十分です。空间手部交互手势输入管理器

ここに画像の説明を挿入
次の変数と関数を使用して、空間ハンド インタラクション キャラクターをカスタマイズできます。

6.3.2.2.2.1 変数
  • float LerpFactor:キャラクターの移動速度と回転速度を調整します。
  • float LerpFactor:キャラクターの拡大縮小速度を調整します。
  • floatMinimumScaleFactor: キャラクターに適用できる最小スケール係数。
  • float MaximumScaleFactor: キャラクターに適用できる最大スケール係数。
  • bool bApplyTranslation:文字を翻訳するかどうかを示します。
  • bool bApplyRotation:キャラクターを回転させるかどうかを示します。
  • bool bApplyScale:文字を拡大縮小するかどうかを示します。
  • FOnSpacesHandInteractableStateChanged OnSpacesHandInteractableStateChanged: 状態を返すために列挙型を使用して、アクターを通じてハンド インタラクションの状態を伝達するデリゲート/ディスパッチャーESpacesHandInteractableState(以下のコード サンプルでこの列挙型がどのように機能するかを参照してください)。
UENUM(BlueprintType, Category = "Snapdragon Spaces Hand Interaction")
enum class ESpacesHandInteractableState : uint8
{
    
    
    Focused = 0,
    Grabbed = 1,
    UnFocused = 2
};

このコンポーネントの使用例はBP_SpacesHandInteractableCube、Blueprint Actor のプラグイン フォルダー SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > HandTracking > Placeable > InteractableObjects にあります。

ここに画像の説明を挿入

6.3.2.2.3 空間キャプチャボリュームのコンポーネント

Spaces Snapping Volume コンポーネントは、 Unreal Engine Box コンポーネントを継承します(新しいウィンドウが開きます)。これは主に、SpacesHandInteractionキャラクタの光線の端を別のキャラクタ内の目的の位置にスナップするために使用されます。これは、ボタン、チェックボックス、スライダーなどのインタラクティブな 3D ウィジェット コンポーネントに特に便利ですが、あらゆるタイプの 3D キャラクターにも使用できます。このコンポーネントはキャラクター内に追加でき、下の図に示すように、たとえば 3D ウィジェットのボタンの上など、必要な場所に手動で配置する必要があります。

ここに画像の説明を挿入

警告
このコンポーネントを UI で使用する場合は、次のガイドラインに従うことが重要です。

  • ボックスの位置とサイズは 3D ウィジェット コンポーネントの形式と一致する必要があります。一致しないと、3D ウィジェット キャラクターの外側でレイキャストするときのちらつきなど、望ましくない効果が発生する可能性があります。
  • コンポーネントの X 軸の方向は、3D ウィジェット コンポーネントの方向と一致する必要があります。これは、ウィジェット コンポーネントと適切に対話するために必要です。

このコンポーネントの動作をカスタマイズするには、さまざまな変数と関数を使用できます。

6.3.2.2.3.1 変数
  • bool bSnap: コンポーネントをスナップに使用するかどうかを決定します。スナップを有効にせずにこのコンポーネントを使用する場合に考えられるシナリオは、3D ウィジェット スライダーです。この場合、光線の端をスライダー ハンドルにスナップすることはできませんが、ユーザー エクスペリエンスのために手の中で光線を視覚化することが必要です。
  • bool bIsUI: コンポーネントが 3D ウィジェット UI コンポーネントの操作に使用される場合、このオプションを有効にする必要があります。他の参加者による使用を無効にすることができます。
  • bool bIsDisabled: コンポーネントの衝突が最初からアクティブであるかどうかを決定します。デフォルトでは false になります。
6.3.2.2.3.1 機能
  • void SetCollisionDisabledState(bool disabled): bIsDisabled の値を設定するために使用されます。
  • void UpdateCollisionStatus(bool active): コンポーネントの衝突状態を更新します。bIsDisabled が true の場合、関数の入力値に関係なく衝突が無効になります。
6.3.2.2.4 宇宙遠隔インタラクションボックスの役割

BP_SpacesDistalInteractionBox遠端のインタラクションを使用して参加者を回転およびスケールできるようにします。これを使用するには、操作のためにアクター内にサブアクター コンポーネントとして追加する必要があります。SnapdragonSpaces コンテンツ > ハンド トラッキング > アクター にありますBP_SpacesDistalInteractionBoxBP_SpacesDistalInteractionBox を別のアクターに追加する方法の例については、 「 SnapdragonSpacesSamples Content > Snapdragon Spaces > Samples > HandTracking > Placeable > InteractableObjects 」にあるBP_PandaInteractableアクターを参照してください。リモート インタラクション ボックスはさまざまなSpaces Distal Manipulator Actorインスタンスで構成されており、それぞれを「処理ポイント」と呼ぶことができます。Spaces Distal Manipulator Actorの 2 つの異なるタイプがありますボックス内のパーツに応じて、アクション ポイントの動作が異なります。ボックスの端にある操作ポイントはキャラクターのスケールを変更するために使用され、残りの操作ポイントは異なる回転を実行し、ボックス上の位置に応じて X、Y、または Z 平面内になります。インタラクション ボックスを操作するには、ピンチ ジェスチャを使用してください。Spaces Distal Scale PointSpaces Distal Rotation Point

ここに画像の説明を挿入

6.3.3 ヒットテスト

6.3.3.1 ヒットテストの例

この例では、現実世界で見つかったテスト ポイントと平面をヒットする方法を示します。ヒット テストと跟踪对象 3DUnreal Engine の Wire Tracing ノード (下図) の機能の基本情報については、Unreal Engine のドキュメント(新しいウィンドウで開きます) を参照してください。この機能を使用するには、[プロジェクト設定] > [Snapdragon Spaces プラグイン] の OpenXR プラグイン設定で有効にする必要があります。また、平面检测ヒット テストが適切に動作するには、この機能を有効にする必要があります。より正確なヒットを得るには、AR 会话配置平面検出機能の凸包検出オプションを有効にします。

ここに画像の説明を挿入

6.3.3.1.1 例の仕組み

サンプルが開いているとき、ギズモは常にユーザーの目の前にあり、更新されるたびにレイキャストが開始されます。成功したヒット結果が返された場合、ギズモはヒット ポーズに移動し、シアン、イエロー、マゼンタで表示されます。ヒットが検出されなかった場合、ガジェットは頭のポーズより 1 メートル前に移動し、赤に変わります。

6.3.3.1.2 ヒットマネージャー

このサンプルでは、BP_HitManager​​Blueprint アセット (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > HitTesting > Placeable にあります) を使用して、サンプル マップでのヒット テストを処理します。ヒット テストを有効または無効にするには、Toggle Spaces Featureメソッドを関数としてヒット テストとともに使用する必要があります。開発者には、ヒット テストに使用される光線をカスタマイズするためのいくつかのオプションがあります。

  • Distance Ray Cast : 光線の長さ。
  • GizmoTag :BP_Pawn配置用に SceneComponent で定義されたタグの名前 (この例では白いギズモとも呼ばれます)。
  • 距離ギズモ: 頭のポーズから配置されたオブジェクトまでの距離。

6.3.4 画像追跡

6.3.4.1 画像追跡の例

このサンプルは、現実世界で見つかった画像オブジェクトを検出して拡張する方法を示します。

追跡可能なオブジェクトの更新のカスタマイズと Unreal Engine のAR Trackable Notifyコンポーネント機能の基本情報については、Unreal Engine のドキュメント(新しいウィンドウが開きます) を参照してください。この機能を使用するには、[プロジェクト設定] > [Snapdragon Spaces プラグイン] の OpenXR プラグイン設定で有効にする必要があります。

6.3.4.1.1 例の仕組み

デフォルトでは、サンプルが実行されて画像が認識されると、物理ターゲット上にギズモが生成されます。現在、サンプルは 1 つの画像のみを認識し、その世界の位置をマップに含まれる UI パネルに表示します。

ここに画像の説明を挿入

6.3.4.1.2 画像 AR マネージャー

BP_ImageTrackingManagerブループリント アセット (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable にあります) は、BP_Gizmo_AugmentedImageイベント システムを通じてキャラクターの作成と破棄を処理します。AR Trackable Notify コンポーネント (新しいウィンドウが開きます) からのイベントをバインドして、AR Trackable の画像への変更に反応します。システムは画像を検出すると、追跡画像イベントの追加/更新/削除を呼び出します。ブループリントの例では、検出を開始する場合はこれをONに設定し、オブジェクトの検出を停止して生成されたすべての AR 画像を破棄する場合はOFFToggle AR Captureに設定する必要がありますこの機能を有効にする代わりに使用できます。さらに、このノードのキャプチャ タイプとしてシーン理解を設定する必要があります。Toggle AR Capture切换空间功能

6.3.4.1.3 画像 AR セッションの構成

システムは、D_SpacesSessionConfig_ImageTrackingリソース (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Core にあります) を使用してイメージの検出を開始します。このリソースは、SpacesSessionConfigクラスから派生したデータ リソースです。

セッション設定ファイルには 3 つのフィールドがあります。1 つはイメージ サイズを定義するフィールド、1 つは追跡する必要がある同時イメージの最大数を指定するフィールド、もう 1 つは追跡する候補イメージを参照するフィールドです。

イメージ トラッカーの作成は、追跡するイメージの数が非常に多い場合のフリーズの問題を回避するために、非同期スレッドで行われます。そのため、画像追跡の開始が遅れる場合があります。デリゲート イベントをリッスンして、On Spaces Image Tracking Is Ready画像の追跡をいつ開始できるかを判断します。

ここに画像の説明を挿入

6.3.4.1.4 AR候補画像

Unreal Engine は、AR 候補イメージと呼ばれる特殊なアセット タイプを使用します (新しいウィンドウが開きます)。XR システムが追跡する必要がある画像への参照を作成します。開発者は、必要なだけ追加して、に示されている配列AR 候选图像に割り当てることができます。AR 会话配置

を作成するにはAR 候选图像、まず追跡するイメージをテクスチャ アセットとしてコンテンツ フォルダー プロジェクトにインポートする必要があります。作成したテクスチャリソースは圧縮設定でUserInterface2D(RGBA)を設定する必要があり、ミップマップをオフにすることを推奨します。

ここに画像の説明を挿入

ヒント 「テスト用のイメージ ターゲット」セクションで使用されている参照イメージを見つける
ことができます。

次のステップではAR 候选图像リソースを作成します。候補テクスチャフィールドは、作成されたテクスチャ リソースを参照します。それぞれに、フレンドリ名フィールドに設定できる一意の識別子がAR 候选图像必要です。そうしないと、異なる候補で同じ名前が使用されると、ハッシュ コードの衝突が発生します。AR 会话配置

最後のステップは、幅/高さフィールドを使用して画像の物理的寸法をセンチメートル単位で定義することです。正しい姿勢推定とその後のオーグメンテーションの配置には、適切な測定が重要です。このデータは、「方向」フィールドで定義された方向に従って画像のスケールを考慮して自動的に入力されます。残念ながら、Unreal Engine の現在の向きは逆になっているため、開発者はポートレート画像にはランドスケープを使用し、ランドスケープ画像にはポートレートを使用する必要があります。

Snapdragon Spaces プラグインは、アセットの親が Spaces AR 候補画像である場合、AR 候选图像さまざまな追跡モードから選択できます。

  • ダイナミック モード: フレームごとに追跡された画像の位置を更新します。移動するターゲットや静的なターゲットに適しています。追跡された画像が見つからない場合、位置や姿勢は報告されません。デフォルトで使用されます。
  • アダプティブ モード: 静止画像がわずかに動いた場合、定期的に (約 5 フレームごと) 静止画像の位置を更新します。これにより、静止画の消費電力と精度のバランスが取れます。
  • 静止モード: 静止していることがわかっている画像の追跡に適しています。このモードで追跡される画像は、最初に検出されたときに位置が固定され、更新されることはありません。これにより消費電力が削減され、パフォーマンスが向上しますが、追跡された画像にドリフトがある場合、その位置は更新されません。

追跡モードは、アプリケーションの実行中に、次のノードを使用して AR セッションを停止または再起動することなく変更できます。

  • 画像ターゲット追跡モードをフレンドリ名で設定します。
  • 候補画像ごとに画像ターゲット追跡モードを設定します。
  • 画像ターゲット追跡モードをフレンドリ名で設定します。
  • 候補画像ごとに画像ターゲット追跡モードを設定します。

SetImageTrackedModeByIDバージョン 0.15.0 で非推奨になりました。

ここに画像の説明を挿入
このサンプルでは、D_SpacesARCandidateImage_SpaceTown​​Blueprint アセット (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable にあります) を使用します。画像ターゲットは高さ 26 cm で測定されます (DIN A4 または US レターで印刷した場合)。BP_Gizmo_AugmentedImageブループリント アセット (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable にあります) は、認識および追跡されたときの方向を示す物理イメージ ターゲットの上にギズモをレンダリングしています。

ここに画像の説明を挿入

6.3.5 平面検出

6.3.5.1 平面検出の例

この例では、現実世界で見つかった追跡平面を視覚化する方法を示します。追跡可能なオブジェクトの更新のカスタマイズと Unreal Engine のAR Trackable Notifyコンポーネント機能の基本情報については、Unreal Engine のドキュメント(新しいウィンドウが開きます) を参照してください。

6.3.5.1.1 例の仕組み

デフォルトでは、サンプルを開くと、検出された平面の単純な形状が生成されます。[凸包検出を使用] オプションを有効にすると、サンプルは検出された平面の凸包を使用して複雑な形状を生成します。

これらのジオメトリのワイヤーフレームも表示できます。

ここに画像の説明を挿入

6.3.5.1.2 フラット AR マネージャー

BP_PlaneARManagerブループリント ファイル (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > PlaneDetection > Placeable にあります) は、イベント システムを介した拡張ジオメトリ操作としてプレーンの作成と破棄を一元管理します。このブループリントは、 AR Trackable Notifyコンポーネント (新しいウィンドウが開きます)からのイベントをバインドして、AR Trackable Plane への変更に反応します。次のイベントは平面検出に関連しています。

  • Add/Update/Remove Tracking Planes : これらのイベントは、システムが単純な平面ジオメトリを使用するときに呼び出されます。
  • Add/Update/Remove Tracked Geometry : これらのイベントは、システムが複雑な平面ジオメトリを使用するときに呼び出されます。
    • 他の場合とは異なり、さまざまなタイプのオブジェクトを として登録できますUARTrackedGeometry凸であることを確認するには、そのオブジェクト分類が である必要がありますEARObjectClassification::NotApplicableGetObjectClassification確認機能をご利用ください。ここに画像の説明を挿入

警告 生成されたすべての AR ジオメトリを破棄する
には、必ずToggleARCaptureの状態を変更して検出を再開し、キャラクターの動作の開始時にONを選択し、検出を停止し、終了時にOFF を選択してください。

6.3.5.1.3 複雑な AR セッション構成

ユーザーが Convex オプションを有効にすると、システムはD_ConvexHullSessionConfigリソース (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > PlaneDetection > Core にあります) を使用して複雑な平面を検出し始めます。

平面検出に関連するオプションは次のとおりです。

  • 凸包検出を使用する
  • レベル検出
  • 垂直面の検出
6.3.5.1.4 機能設定

機能設定は、OpenXR プロジェクト設定で機能の横にある歯車アイコンをクリックすると平面检测表示されます。

  • シーン理解を使用する:
    • この設定を有効または無効にすると、検出された平面の形状と数の点で異なる結果が生成されます。
    • この設定を有効にすると、场景理解平面の検出が有効になります。これには、了空间网格划分(实验)関数で使用されるのと同じ手法が利用されます。

デフォルトの平面検出とシーン理解ベースの平面検出の違い

測定 デフォルト 場面理解
検出速度と初回検出 普通 素早い
偽陽性 非常に低い誤検知率 誤検知が起こりやすい
平面精度 高い 高い
飛行機の数 レア たくさんの
飛行機の更新と移動 安定しているため、更新される可能性は低い よりフラットなアップデートによる動的な AR セッション構成
平面配向フィルタ 水平フィルタと垂直フィルタのオプション フィルタオプションはありません
ヒットテスト 飛行機に対しては期待どおりに動作します グリッドに対するヒットテスト

6.3.6 カメラフレームワークへのアクセス(実験的)

6.3.6.1 カメラフレームアクセス例

警告
現在、プラグインと Snapdragon Spaces サービスの最適化により、リリース間での下位互換性が失われているため、カメラ フレーム アクセス機能は実験的としてマークされています。

このサンプルでは、​​サポートされているデバイスから関連するカメラ情報 (この場合はカメラ画像と組み込み関数) にアクセスする方法を示します。現在、この機能は RGB カメラに限定されています。

6.3.6.1.1 例の仕組み

デフォルトでは、サンプルを実行すると、デバイスによってキャプチャされた RGB イメージとそれに関連付けられた固有の値が UI に表示されます。ユーザーは、対応するボタンを使用してフレーム キャプチャを一時停止および再開できます。

ここに画像の説明を挿入
デバイスが許可されない場合相机访问权限、画像、ボタン、カメラの情報は、ユーザーに有効にするよう促す警告メッセージに置き換えられます。

6.3.6.1.1.1 カメラフレームワークの AR マネージャーへのアクセス

このサンプルでは、BP_CameraFrameAccessARManager​​ブループリント アセット (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > CameraFrameAccess > Placeable にあります) を使用してカメラ キャプチャを開始および停止します。キャプチャを開始する場合はON切换 AR 捕获に設定しキャプチャを停止する場合はOFFに設定する必要があります。さらに、このノードのキャプチャ タイプとしてカメラを設定する必要があります。この機能は、あらゆるリソースの構成をサポートします。また、スペース機能の切り替え方法を使用して有効または無効にすることもできますSpacesSessionConfig

6.3.6.1.1.2 カメラキャプチャライブラリ

Unreal AR インターフェイスは、カメラから情報を取得する機能を提供します。

  • Get AR Texture
    • カメラフレームを返します。Snapdragon Spaces プラグインは、RGB フレームを 2D テクスチャとして提供するために情報を拡張します。Spaces AR 相机图像纹理クラスにキャストしてフレーム RGB テクスチャを取得します。また、カメラ画像をこのノードのテクスチャ タイプとして設定する必要があります。
  • Get Camera Intrinsics
    • カメラの画像解像度焦点距離主点を返します。
      ここに画像の説明を挿入
      Snapdragon Spaces プラグインは、ブループリントのカメラ キャプチャの管理に役立つ追加機能を提供します。
  • Set Camera Frame Access State
    • カメラのキャプチャを一時停止するには、FALSEActiveに設定しますカメラによるキャプチャを続行するには、TRUEに設定しますバージョン 0.15.0 では非推奨となりました。代わりに、 AR セッションの一時停止またはスペースの一時停止機能を使用してください。Active
  • カメラ フレーム アクセスはサポートされていますか
    • キャプチャが利用可能な場合はTRUEを返し、そうでない場合はFALSEを返します。アプリケーションがキャプチャを使用する場合は、Tick中にこの結果を確認することをお勧めします。バージョン 0.15.0 では非推奨となり、この機能が利用可能な場合は代わりに使用してください。ここに画像の説明を挿入

ヒント
サンプルの動作は、WBP_CameraFrameAccessBlueprint アセット (SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > CameraFrameAccess > UI にあります) に実装されています。

6.3.6.2 上級者向け

このセクションでは、生成されたテクスチャから抽出せずに生の YUV カメラ フレーム データにアクセスする方法について説明します。また、ブループリントではアクセスできない追加データを取得する方法についても説明します。USpacesRuntimeBlueprintLibraryの一部として使用可能な関数や に含まれる関数など、この手順に関係するすべてのデータ型と構造が含まれますSpacesRuntimeBlueprintLibrary.h

ヒント
これらのデータと関数には、C++ 経由でのみアクセスできます。

6.3.6.2.1 データ型

ESpacesPlaneCameraFrameTypeフレーム プレーンのタイプを説明する列挙体。

UENUM()
enum class ESpacesPlaneCameraFrameType : uint8
{
    
    
	Y = 0,
	U = 1,
	V = 2,
	UV = 3
};

ESpacesDistortionCameraFrameModelカメラキャリブレーション用のさまざまなレンズ歪みモデルを説明する列挙型。

UENUM()
enum class ESpacesDistortionCameraFrameModel : uint8
{
    
    
	Linear = 0,
	Radial_2 = 1,
	Radial_3 = 2,
	Radial_6 = 3,
	FishEye_1 = 4,
	FishEye_4 = 5
};

ESpacesCameraFrameFormatカメラ フレームのさまざまな形式を説明する列挙型。

UENUM()
enum class ESpacesCameraFrameFormat : uint8
{
    
    
	Unknown = 0,
	Yuv420_NV12 = 1,
	Yuv420_NV21 = 2,
	Mjpeg = 3,
	Size = 4,
};

FFrameDataOffsetフレームバッファデータ内のセンサー画像データのオフセットを記述する構造体。

USTRUCT()
struct FFrameDataOffset
{
    
    
	GENERATED_BODY()
	int32 X;
	int32 Y;
};

FSpacesPlaneCameraFrameDataフレームバッファ内のプレーンを記述する構造体。

USTRUCT()
struct FSpacesPlaneCameraFrameData
{
    
    
	GENERATED_BODY()
	uint32 PlaneOffset;
	uint32 PlaneStride;
	ESpacesPlaneCameraFrameType PlaneType;
};

  • PlaneOffsetバッファーの先頭からフラット データの先頭までのオフセットが含まれます。
  • PlaneStrideある行から次の行までのバイト距離を示します。
  • PlaneTypeフレームデータの種類を記述します。

FSpacesSensorCameraFrameData拡張カメラ固有データを含む構造体。

USTRUCT()
struct FSpacesSensorCameraFrameData
{
    
    
	GENERATED_BODY()
	FARCameraIntrinsics SensorCameraIntrinsics;
	FFrameDataOffset SensorImageOffset;
	TArray<float> SensorRadialDistortion;
	TArray<float> SensorTangentialDistortion;
	ESpacesDistortionCameraFrameModel DistortionCameraFrameModel;
};

  • SensorCameraIntrinsicsカメラの画像解像度、主点、焦点距離が含まれます。
  • SensorImageOffsetフレームバッファデータ内のセンサー画像データのオフセットです。
  • SensorRadialDistortion放射状歪み係数を記述する浮動小数点数の配列。
  • SensorTangentialDistortion接線方向の歪み係数を表す浮動小数点数の配列。
  • DistortionCameraFrameModelカメラ キャリブレーション用のレンズ歪みモデルについて説明します。

FSpacesCameraFrameData構造体にはフレームデータとカメラデータが含まれます。

USTRUCT()
struct FSpacesCameraFrameData
{
    
    
	GENERATED_BODY()
	uint32 BufferSize;
	uint8* Buffer;
	ESpacesCameraFrameFormat FrameFormat;
	TArray<FSpacesPlaneCameraFrameData> Planes;
	FSpacesSensorCameraFrameData SensorData;
};

  • BufferSizeデータを含むバッファのサイズです。
  • Bufferフレームデータへのポインタです。
  • FrameFormatカメラフレームのフォーマットです。
  • Planesフレーム平面を含む配列です。
  • SensorDataフレームをキャプチャしたカメラを含む拡張固有データ。
6.3.6.2.2 機能
  • static FSpacesCameraFrameData GetCameraYUVFrameData(): FSpacesCameraFrameData 形式で最新のカメラ フレーム データにアクセスして返します。
  • static bool ReleaseCameraFrameData(): 以前にアクセスしたフレームを解放します。別のフレームにアクセスするには、前のフレームのデータの後に使用する必要があります。

おすすめ

転載: blog.csdn.net/weixin_38498942/article/details/132585525