Edited at

LookingGlassの技術的複数運用について


公式SDK(1.0.0)に実装されました!!公式を使いましょう!!


先まとめ

現SDKでは一台目のパラメータしか読まないので

2台目以降はレンチキュラーが正常に作動しないので

コードに若干手を入れました。



前提環境(デメリット)

・LookingGlassを複数台所有していること

・SDKのアップデートを待っていられない人向け(そのうち実装される)

・複数台映せるグラボパワーがあるPC環境



メリット

・縦に並べるとキャラクターの半身以上を大きく映せる

・LookingGlassは縦方向は一視点だが2台並べると”なんか”気にならない

・横に並べるとキャラの移動がなんか新鮮



技術的お話


現状の仕様

・LookingGlassのEEPROMからそれぞれ固有のレンチキュラーのパラメータを読んで

 立体視用に変換している。それぞれパラメータはバラバラ。

・現在のコードでは”一台目”のパラメータしか読んでいない。



EEPROMCalibration.cs(改造版)

(中略)

private static int rw(中略)
{
(中略)
hid_device_info enumerate = (hid_device_info)Marshal.PtrToStructure(ptr, typeof(hid_device_info));
string epath = enumerate.path;

//ここから追加
for (int k = 0;k < TargetDisplay; k++)
{
hid_device_info enumerate_Multi = (hid_device_info)Marshal.PtrToStructure(enumerate.next, typeof(hid_device_info));
epath = enumerate_Multi.path;
}
//ここまで追加
IntPtr handle = HIDapi.hid_open_path(epath/*enumerate.path*/);//epathを読むように変更



・hid_device_info enumerateがEEPROMのアドレスを持っているので2台目以降の時は

 enumerate.nextで次のアドレスを引っ張って来て情報を取得するように変更。(next==0で最後フラグ)

 2台目以降フラグはunityのTargetDisply番号を渡すようにしました。(ここは設計次第)

※unityでマルチディスプレイを行うときは『Display.display[X].Activate();』が必要です。



最後に

・公式SDKで複数台対応されるのが待ちきれない人用です。

・LookingGlassを複数台持っていて、かつ複数台に描画できるPCを持っている人用です。

・複数台で縦に並べて好きなキャラクターをドアップで見たい人用です。



おまけ

LookingGlassのパラメータはコードをイジらずともインスペクターから

いじれます。こちら