ぼっちプログラマのメモ

UE4とかUE5とかについて書いたり書かなかったり。

OculusRift用のレティクルを自作

OVRPlayerControllerには元々レティクル表示機能(OVRCrossHair)がありますが、
表示に使用している2次元座標(OVRCrossHairのXL,YL)が使いにくかったり、
3次元座標にしようとすると色々おかしくなったり、
マウス位置と完全に連動していなかったりで、
ストレスMAXになったので自作…という経緯

レティクル表示に必要なもの

とりあえず、必要なものを洗い出し

マウスのスクリーン座標取得とビルボード表示については
解説サイトが山ほどあるので、2番めのカメラの取得について説明というかメモ

OVRでのカメラ取得方法

ステレオカメラなどで色々と面倒かと思いきや、案外簡単。
OVRCrossHairを見てみると、↓のコードでカメラを取得している様に見える

CameraController.GetCamera (ref MainCam);

CameraController.GetCameraの中身を見てみると、

public void GetCamera(ref Camera camera)
{
	camera = CameraRight;
}

…え、右側のカメラを使っているだけ?
補間などの面倒な処理をしているかと思っていたので拍子抜け

f:id:pafuhana1213:20130908144209j:plain
f:id:pafuhana1213:20130908144211j:plain

で、色々してこんな感じでできました

  1. マウスのスクリーン座標を取得
  2. 以前の記事で書いた方法で、マウスカーソルの3次元座標を計算
  3. 計算した3次元座標にビルボード表示

詰まった所メモ

  • GUITextureでレティクル表示しようとしたのですが、ステレオカメラ+OculusRift表示用の歪み補正などが重なっているせいか、なかなか上手くいかなかったので却下
    • Screenを用いた情報はあまり使用しない方がいい?
      • Plane+ビルボード表示を使用。デプステストへの対応が今後必要になると予想