2016年09月11日

Oculus SDK 1.7.0とGLUTのテスト

前回はサンプルを改変しましたので、今回は自分のプログラムで使用する場合のテストです。といってもウィンドウ作成などをglut/glewで行って、残りはほぼサンプルのWin32_GLAppUtil.hを書き換えた感じです。

元のサンプルの部分がそうなのかどうか詳しく見てないですが、面の方向が逆だったのかglFrontFace(GL_CW)で時計回りにしないとうまく表示されませんでした。他にもGL_CULL_FACEを有効化しないとおかしくなったので、何か間違っているかもしれません。

実行結果

ovr170_test_001.png

以下ソース
Win32_GLAppUtil_Custom.h
OVR1.7.0OpenGL.cpp
simple170.vert
simple170.frag

OculusRoomTiny(GL)からの転用が多いので、その辺のライセンスになるかと思います。シェーダはWin32_GLAppUtil.hに直書きしていたのをそのままファイルに出力しただけです。何か問題が起こっても責任はとりません。
web拍手 by FC2
posted by シンドラー at 22:17 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2016年08月27日

Oculus SDK v1.7.0のOculusRoomTiny(GL)に関するメモ

Oculus Rift製品版届いていたのですが、あまり使っていなかったのでボチボチ触ってみようかと思います。今回はOculusSDK/SamplesのひとつであるOculusRoomTiny(GL)に関するメモです。一応OpenGLのサンプルですが、Oculus的にはDirectXがメインで、OpenGLはあまりサポートしていないみたいです。

サンプルプログラムの構成としては、main.cppと、OculusRoomTiny_Advanced/Common/Win32_GLAppUtil.hの2つがメインで、Win32_GLAppUtil.hの方で色々定義されているようです。

サンプルは単純なRoomのデモということですので、今回はこれを書き換えて、Tda式ミクさんを表示してみることにします。シーンの生成は、Sceneクラスで行っているため、この辺りを書き換えていくことになります。

// シーンの生成
roomScene = new Scene(false);

Sceneは構造体で、最大モデル数10個の配列になっていますので、モデル数を増やしたい場合はここも書き換える必要があります。

また、Init関数でシェーダをテキスト形式で直書きしているので、ここをファイル読込みに書き換えれば、GLSLのシェーダを使用できるようになると思います。デフォルトはかなり単純にテクスチャの色などをそのまま表示しているようです。その後、タイルパターンのテクスチャを生成しているので、ここを画像を読み込むようにすれば、モデルのテクスチャも使用できるようになるはずです。最終的に、Model構造体にテクスチャバッファを割り当てて、頂点やIndexに必要なメモリ領域を確保してからSceneに追加しています。

Model構造体では、頂点数及び面数が最大値2000と少ないので、ここはファイル読込みで動的確保するように書き換える必要があります。サンプルとしてAddSolidColorBoxという関数があり、この関数でBoxの追加をすることができますが、基本的にはAddVertex関数とAddIndex関数で頂点情報とIndex情報を設定して、最後にAllocateBuffers関数を呼ぶ流れになるかと思います。

今回はMMDBridge[1]でTda式ミクさん[2]に[3]のポーズをしてもらったものをobjで出力して、それを読み込むことにしました。で、実際にやってみたところ、HMDの姿勢の追従はかなり高い精度でしてくれているのですが、どうもPosition trackingの方が殆ど効いていないようです。コントローラで操作することをメインにしているのか、顔を前後左右に平行移動しても、視点の位置が変わらない感じです。
(2016.9.13追記:環境の問題だったみたいです。違うPCだと位置も追従しました)

DK2の時にはできていたので、製品版でもできるはずなのですが、やり方がよくわかりませんので、どなたかわかる方がいましたら教えてください。UnityのUtilityでも使えば行けるのでしょうか。

頭の位置が固定で周りを見回すYouTubeの360度動画のような感じではなく、頭を動かしてのぞき込んだり近づいたりといった操作ができた方が直感的だと思いますので、main.cppのMainLoopを書き換えることにしました。元のサンプルでは下記のような動作を想定しているようです。

oculus_sdk_v170_test001.png

本来、shiftedEyePosには左右の眼の位置であるEyeRenderPose[eye].Positionが反映されているはずなので、平行移動なども効いてくれるはずなのですが、この位置をファイルに出力してみても、平行移動ではあまり数値が変わらなかったりよくわかりませんでした。平行移動の情報が入ってそうなovrPoseStatefのLinearVelocityもなぜかずっと0になっていたり。

そこで無理やりですが、注視点を動かすのではなく、注視点を固定して、視点位置の方を動かすように変更してみました。

oculus_sdk_v170_test002.png
これで頭を動かすと、平行移動というか円運動したような感じになります。

実行結果

targetPosが、見えづらいですが赤いBoxで表示している位置です。そこを周りから眺めるような動作になります。


Seesaaの動画はFlash使ったPlayerをやめたんですね…。wmvが表示されなくなったみたいです。

[1] MMDBridge
[2] Tda式初音ミク・アペンドVer1.00
[3] あぴミクさんのポーズ
web拍手 by FC2
posted by シンドラー at 02:33 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2015年07月28日

[Unity 5] Mikulusのようなもの作成メモ [DK2]

忘れそうなのでメモです。書籍に載ってる細かい話などは省略です。

0. Edit→Project Settings→Player→Virtual Reality Supportedにチェックを入れる。
1. GameObject→3D Object→Cubeでキューブ作成、Position(0,-0.5,0), Scale(100,1,100)にして床にする
2. MMD4Mecanim[1]でモデル変換、良さそうなVMD立ちモーションを割り当てておく
(今回は[2]のモデル、[3]のモーションを使用させていただきました)
3. モデルをDrag&DropしてPosition(0,0,0)に配置
4. Assetsのどこかで右クリック→Create→Animator Controllerを追加。モデルのAnimationのControllerにDrag&Drop
5.追加したAnimator Controllerをダブルクリック→変換した立ちモーションをDrag&Drop
6. 追加したモーションをクリック→Edit...→Loop Timeとかにチェックを入れて立ちモーションをループ
7.GameObject→CreateEmptyを追加。名前をDummyに変更。Position(0,1.3,0.1)、Rotation(0,180,0)にする。Main Cameraを作成したGameObjectにDrag&Dropして親ノードとする。Main Cameraの位置姿勢は0にする。
8. Main CameraのField of Viewを30にする。Clipping PlanesのNearを0.01にする。HDRにチェックを入れる。
9. モーションにまばたきが入っていない場合は[4]を追加
10. カメラの方を向いてもらうように目線制御[5][6]を追加。AssetのHead Look Controllerを使用する方法も。
11. MMD4MecanimのComponent->Scripts->MMD4MecanimMorphHelperで照れ、恐ろしい子!などを追加[6]
12. 物理有効化→物理パラメータを少し修正して動かしやすいように
13. Bloom効果を入れるために各種ImageEffectを追加[7][8]。ついでにDepth of Field等も入れてみる。
14. Bloom具合を上げる場合はbody_pinkやbody_greenのシェーダをStandardにしてEmissionを変更[7]。MMD4MecanimでALを有効にする方法があるかも(未確認)。
15. キーボード入力スクリプトの追加

前回辺りのスクリプトだと動きがおかしかったので修正しました。
・回転の基底ベクトル3本はtransform.forward, transform.right, transform.upで取得できる。(正規化されていない?)
・マニュアル[9]によると、ワールド座標のはずだが、親ノードにその移動量をTranslateすると方向がおかしい(TranslateはlocalPosition移動?)
・親の姿勢ベクトルを反映させないと駄目?ということで下記に修正するとそれっぽくなった。
  // メインカメラの向きを親ノードの方向に変換?
  mainForward = mainCamera.transform.forward;
  mainRight = mainCamera.transform.right;
  mainUp = mainCamera.transform.up;
  dummyForward = dummy.transform.TransformDirection (mainForward);
  dummyRight = dummy.transform.TransformDirection (mainRight);
  dummyUp = dummy.transform.TransformDirection (mainUp);

以下スクリプト
HmdScript.cs

とりあえずはこのような感じで、後は予め複数モデルを読み込んでおいてキーボードで有効/無効切り替えでも作りますかね。動的に読み込みなどは難しそうですし。

実行結果

派手にBloomしてみました。どこかで派手に光らせるのは現実ではありえないので駄目とか見た気もしますが。HMDで見ているものを動画にすると方向変わりすぎて見づらいですね…。



[1] MMD4Mecanim
[2] 【MMD】化粧を落としたアペミク配布
[3] 【MMO】MMO用待機モーション【モーション配布】
[4] MMD4MFaceBlink - MMD4Mecanimでまばたき
[5] 我がブログ - Mecanimで目線制御
[6] 主婦ゆに!
[7] [Unity5] Bloomで光らせる
[8] UnityのImageEffectで遊んでみる
[9] http://docs.unity3d.com/ScriptReference/Transform.html
web拍手 by FC2
posted by シンドラー at 23:05 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2015年05月23日

Oculus SDK 0.6.0.0とGLUTのテスト

Oculus SDKがv0.6.0.0になっていろいろ変わりましたので、GLUTでのテストをしてみました。
最近はSDKのサンプルにOculusRoomTiny(GL)がありますので、あまり必要ないのかもしれません。

1. Extended modeで動かない
こちらGTX690ですが、Direct display modeにしないと、サンプルとか今回のものとかが動きませんでした。

2. FBO2枚に分離
前は1枚のFBOの左半分に左目、右半分に右目を描画していたのですが、2つに分かれたみたいです。

3. Mirrorテクスチャも必要?
追加でMirror用のFBOが増えていて、そこに描画してから転送しているような雰囲気でした。

実行結果
ミラー画面をキャプチャした画像です。
oculusv0.6.0.0_001.png

Directモードのおかげか、ポリゴン1枚しか描画していないからかわかりませんが、追従遅れなどはほぼ感じなかったです。

以下ソース
main_glut_v0.6.0.0.cpp
simple.vert
simple.frag
OculusRoomTiny(GL)からの転用が多いので、その辺のライセンスになるかと思います。何か問題が起こっても責任はとりません。

web拍手 by FC2
posted by シンドラー at 03:13 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2014年12月25日

Oculus SDK 0.4.1から0.4.4への修正点メモ(OpenGL用)

0.4.4で速くなったり安定したりというお話を聞いたので、そろそろバージョンアップしてみました。DirectXやUnityのお話の気もするので、OpenGLでその恩恵が受けられるのかどうかわかりませんが。

0.4.1のプログラムをコンパイルしようとしたらエラーがでたので、修正点のメモです。GLFW3を使う場合は、[1]を使えばそのままコンパイル/実行できます。試していないですが、OculusRoomTinyのOpenGLバージョンが[2]にあるので、参考になると思います(Oculus SDK付属のサンプルはDirectXだけになってたみたいなので…)。

変更点1 RTSize -> BackBufferSize
[1]にも書かれていますが、変数名が変わったようなので修正します。
    ovrGLConfig cfg;
    cfg.OGL.Header.RTSize = OVR::Sizei(hmd->Resolution.w, hmd->Resolution.h);
        ↓
    cfg.OGL.Header.BackBufferSize = OVR::Sizei(hmd->Resolution.w, hmd->Resolution.h);

変更点2 ovrHmd_GetEyePose -> ovrHmd_GetEyePoses
0.4.1では片目毎にovrHmd_GetEyePoseをしていたのですが、ovrHmd_GetEyePosesで一度に取得するようになったようです。
    ovrHmd_GetEyePoses(hmd, frameIndex, eyeRenderOffset, eyeRenderPose, NULL);

変更点3 ViewAdjust -> HmdToEyeViewOffset;
変更点2にも関係しますが、0.4.1ではViewAdjustで左右目のIPD差?を取得できていたのですが、HmdToEyeViewOffsetという名前に変わっていました。
    ovrVector3f eyeRenderOffset[2];
    eyeRenderOffset[ovrEye_Left] = eyeRenderDesc[ovrEye_Left].HmdToEyeViewOffset;
    eyeRenderOffset[ovrEye_Right] = eyeRenderDesc[ovrEye_Right].HmdToEyeViewOffset;

後、[1]では大丈夫だったのですが、自前のglutバージョンを0.4.4対応に修正したものでは、health and safety warningをAPIで非表示にした場合に、トラッキングのエラー?が出て画面が真っ暗になってしまったため、[3]を参考に無理やり非表示にしました。

[1] Simple, one page, OpenGL example (0.4.4)
[2] Oculus SDK 0.4.4-beta OpenGL Demo
[3] Oculus Rift SDK 0.4.3bでhealth and safety warningを非表示にする方法
web拍手 by FC2
posted by シンドラー at 08:15 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2014年09月03日

Oculus SDK 0.4.1とOpenAL Soft 1.15についてのメモ

CEDEC2014で、3Dサウンドは効果的ですよみたいな話があったみたいなので、Oculus SDK+Glut+OpenAL Softのメモです。OpenAL Soft[1]が1.16になってますね。

1. 音声データの準備
[2]では、モノラルの16ビットの44100Hzにしていますので、効果音などのデータを一度その形式に変換することにします。変換はffmpegを使うことにしました。コマンドは[3]を参考にさせていただきました。

Windowsのバッチファイルでドラッグ&ドロップして同名のwavファイルを作成する場合
ffmpeg -i %1 -ac 1 -ar 44100 -acodec pcm_s16le %~n1.wav

2. OpenAL Softの使用
[2]を見れば大体問題ないかと思います。省略。

3. Oculus SDK 0.4.1との組み合わせ
OpenALでは、音源をSource、ユーザの位置をListenerとして設定しますので、Oculus SDKで取得した位置姿勢をListenerの関数で設定してあげればよい、ということになります。
  for (int eyeIndex = 0; eyeIndex < ovrEye_Count; eyeIndex++)
{
ovrEyeType eye = hmd->EyeRenderOrder[eyeIndex];
eyeRenderPose[eye] = ovrHmd_GetEyePose(hmd, eye);

OVR::Matrix4f rollPitchYaw = OVR::Matrix4f(eyeRenderPose[eye].Orientation);
OVR::Vector3f finalUp = rollPitchYaw.Transform(OVR::Vector3f(0,1,0));
OVR::Vector3f finalForward = rollPitchYaw.Transform(OVR::Vector3f(0,0,-1));
OVR::Vector3f shiftedEyePos = HeadPos + eyeRenderPose[eye].Position;
OVR::Vector3f targetPos = shiftedEyePos + finalForward;
OVR::Matrix4f view = OVR::Matrix4f::LookAtRH(shiftedEyePos, targetPos, finalUp);
...
}
alListener3f( AL_POSITION, shiftedEyePos.x, shiftedEyePos.y, shiftedEyePos.z );
// 速度の計算は省略。(現在位置-前の位置)/微小時間
alListener3f( AL_VELOCITY, vel[0], vel[1], vel[2] );
// 前方向と上方向を指定すればよい。正規化は必要?
float orient[6] = { /*fwd:*/ finalForward.x, finalForward.y, finalForward.z,
/*up: */ finalUp.x, finalUp.y, finalUp.z };
alListenerfv( AL_ORIENTATION, orient );
...

前回の一枚絵の位置に足音の音源を設置して、見回したり絵の位置を動かすとちゃんと3次元的に位置が変わったので、多分問題ないと思います。

[1] http://kcat.strangesoft.net/openal.html
[2] http://cranialburnout.blogspot.jp/2012/08/openal-soft-demonstration-of-binaural.html
[3] http://www.xucker.jpn.org/pc/ffmpeg_wav.html
web拍手 by FC2
posted by シンドラー at 02:41 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2014年08月30日

Oculus SDK 0.4.1の変換行列について

Oculus SDKのライブラリで計算してくれるのであまり必要ありませんが、ビューイング行列とプロジェクション行列に関するメモです。サンプルプログラムを参考にしていますが、正しいかどうかはわかりません。

普通fov, aspect, near, farを使ってプロジェクション行列を計算しますが、Oculus SDK 0.4.1では、左右で中心位置がずれているため、4つfov情報がeyeRenderDesc.Fovとして提供されています。
oculus_memo_001.png
三角関数のタンジェント的に、この4つのFovとleft, right, top, bottomの関係は下図のようになります。
oculus_memo_003.png
これにより、left, right, top, bottomと、プロジェクション行列が計算できます。(中心から考えるとleftとbottomにマイナスが付きます?)
oculus_memo_004_2.png
ovrMatrix4f_Projectionで計算した行列と、上記で計算した行列は一致しましたので、合っていると思います。
(2014.12.15追記)
よく見たら一致していませんでした。OpenGLの正規化座標系は-1≦z≦1なのに対して、DirectXでは0≦z≦1になるみたいです[2]。


続いて、ビューイング行列です。LookAtRHで行列を計算する場合は、普通のビューイング変換行列の計算と同じようです。左目用、右目用では、とりあえずHMDの位置で計算してから、ViewAdjustだけ平行移動させるやり方のようです。
oculus_memo_005.png
後はOpenGLの一次元配列の順番的に、シェーダ等に渡す場合は転置が必要です。
oculus_memo_006.png

実行結果
板ポリゴン1枚にテクスチャを貼り付けてみました。前回のと組み合わせてセカンダリディスプレイの内容をHMDで表示させたりしようかなと考えていますが、更新周波数的に厳しいかもしれません。一応OpenGLでも75Hzでちゃんと動かせば遅延なくトラッキングしてくれますね。

oculus_memo_002.png

[1] 富士山画像:http://free-photo.gatag.net/2010/05/23/120000.html
[2] http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/perspective-projections-in-lh-and-rh-systems-r3598
web拍手 by FC2
posted by シンドラー at 13:02 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2014年08月22日

プライマリディスプレイ表示プログラムの作成

計算機環境やいくつかのプログラムでは、Oculus Riftをプライマリディスプレイにしないと75Hz出なかったりして困ります。かといってOculus Riftをプライマリディスプレイにすると、歪んだデスクトップの操作をしないといけないので、プログラムを起動するだけでも結構大変です。

そこで、プライマリディスプレイのスクリーンをセカンダリディスプレイのスクリーンに表示するプログラムを作成しました。探せばありそうでしたが、探すのが面倒だったので適当に作りました。

実行結果

プログラムを実行すると、2番目のディスプレイに1番目のディスプレイに表示されている内容が表示されます。Oculus Riftをプライマリに設定したら、普通のディスプレイのどれかに下記のような画像が表示されます。ViewPrimaryなのにViewParamになってますね…。

ViewPrimary_001.png

手抜きでマウスカーソルはただの赤い楕円です。一応表示しているので操作はできます。MMEで樽型歪みエフェクト[1]を使う場合などは、Oculus Riftをプライマリにしておいて、セカンダリに表示された画面を見ながら動かして、Oculus Riftで見たいときだけAlt+Enterで全画面にすればいいので楽です。樽型歪みエフェクトはパラメータがDK1用っぽいので、多少修正が必要かと思います。

ViewPrimary_002.png

ソースコードと実行プログラム
ViewPrimary.cpp
ViewPrimary.zip

Windows APIはほとんど使ったことがないので何か問題があるかもしれません。後残念ながらOculus Riftのプログラムをフルスクリーンで実行するとこちらの画面は更新されなくなってしまいました。参考にしたWebサイトはソースコード内のコメントに書いてあります。

[1] 【MMD】Oculus Rift向け樽型歪みエフェクト(前編)【MME】
web拍手 by FC2
posted by シンドラー at 22:13 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2014年08月16日

Oculus SDK 0.4.1とGLUTのテスト

SDKが0.4.1になりましたね。というわけでそれに合わせた修正と、前回のサンプルではHMDの位置がちゃんと反映されていなかったのようなので、サンプルソースコードを参考に位置情報を反映させるようにしてみました。適当に参考にしただけなので間違っているかもしれません。あと、FPSの表示もしてみましたが、これもOculus Rift側で表示できるようにするべきだとは思います。

1.目の高さのパラメータの取得
ovrHmd_GetFloatでパラメータの取得ができるのだと思います。
    // 頭の位置の取得
static OVR::Vector3f HeadPos(0.0f, 1.5f, 0.0f);
HeadPos.y = ovrHmd_GetFloat(hmd, OVR_KEY_EYE_HEIGHT, HeadPos.y);

2. HMDの位置姿勢情報の取得
        ovrEyeType eye = hmd->EyeRenderOrder[eyeIndex];
eyeRenderPose[eye] = ovrHmd_GetEyePose(hmd, eye);

3. ビューイング変換行列の計算
HMDの姿勢から、上ベクトルと前ベクトルを計算します。左右の目の位置差がeyeRenderDesc[eye].ViewAdjustになるようなので、LookAtRHで右手系のビューイング変換行列を計算した後で、左右の位置差分の平行移動を行います。たぶん。
        // 姿勢の取得
OVR::Matrix4f rollPitchYaw = OVR::Matrix4f(eyeRenderPose[eye].Orientation);
// 視点の上ベクトル、前ベクトルを計算
OVR::Vector3f finalUp = rollPitchYaw.Transform(OVR::Vector3f(0,1,0));
OVR::Vector3f finalForward = rollPitchYaw.Transform(OVR::Vector3f(0,0,-1));
// 視点のワールド座標を取得
OVR::Vector3f eyePos = HeadPos + eyeRenderPose[eye].Position;
// ビューイング変換行列の計算
OVR::Matrix4f view = OVR::Matrix4f::LookAtRH(eyePos,
eyePos + finalForward, finalUp);
// 左右の目の位置の違い分を平行移動
view = OVR::Matrix4f::Translation(eyeRenderDesc[eye].ViewAdjust) * view;

4. プロジェクション変換行列の計算
これもLibOVRに関数があるようなので、それを使用します。
        // プロジェクション変換行列の計算
OVR::Matrix4f proj = ovrMatrix4f_Projection(eyeRenderDesc[eye].Fov,
0.01f, 10000.0f, true);

5. ビューポート変換行列の計算
これは初期化時に事前計算したものを使用します。
        // ビューポートの設定
glViewport(eyeRenderViewport[eye].Pos.x, eyeRenderViewport[eye].Pos.y,
eyeRenderViewport[eye].Size.w, eyeRenderViewport[eye].Size.h);

以下ソースコード
main_glut4.cpp
simple.vert
simple.frag

おまけ
オレオレライブラリに組み込んであぴミクさんを表示するところまではできました。今はテクスチャ表示しかしていないので75Hzでてますが、色々加えたらどうなりますかね。
oculus_opengl_002.png

web拍手 by FC2
posted by シンドラー at 03:49 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2014年08月12日

Oculus SDK 0.4.0とGLUTのテスト

夏休みですね。油断するとだらだら過ごしてしまうのでOculus Riftで遊びたいと思います。

時代的にはGLFWの方が良いのかもしれませんが、過去の遺産を使いたいのでとりあえずfreeglut版に変更してみました。

ソースコード((2014.8.12 三角形の頂点が右回りになっていたので修正))
(視点の位置によって見えなくなるかもしれないのでglDisable(GL_CULL_FACE);にした方が良いかも)
main_glut2.cpp

GLUTではモニタを指定してフルスクリーンみたいなことができないようなので、ウィンドウをOculus Riftの方に持っていってからキーボードでフルスクリーンに切り替えることにしました。また、ウィンドウハンドルの取得ももうちょっとうまくできるはずですがとりあえず適当です。

FBOの内容を取得して保存してみましたが、樽状の変換はLibOVR側でやってくれるようで、普通に視点を変えて左右にレンダリングしたのでいいみたいですね。

oculus_fbo_001.png

次はオレオレライブラリにOculus SDKを組み込んでみたいと思います。

web拍手 by FC2
posted by シンドラー at 12:38 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

2014年08月09日

Oculus SDK 0.4.0とGLFWのテスト

Oculus Rift DK2はいい感じですね。残念ながら?OpenGL派ですので、DK2でOculus SDK 0.4.0でGLFWを使う方法についてメモっておきます。

1. Visual Studio 2010 Express Editionでのコンパイル

[1]を参考にさせていただきました。ATLが必要なんですね。後はkernel32.libが見つからない等はWindows SDKで、タイマ系の関数がリンクできないと出たらwinmm.libを追加して、ソケットっぽい関数がリンクできないとでたらws2_32.libを追加したらコンパイルできました。

2. GLFWの使い方などOpenGL回りについて

[2]〜[4]を参考にさせていただきました。

3. Oculus Rift + OpenGLの使い方について

[5][6]を参考にさせていただきました。SDL2を使う場合は[6]そのままで良さそうです。

実行結果

三角形1枚描画しているだけです。

oculus_opengl_001.png

何かちょっとポジショントラッキングのブレが大きいような気もします。OpenGLのせいなのかどこか間違えているのかはわかりませんが。

以下ソースコード(2014.8.12 三角形の頂点が右回りになっていたので修正)
(視点の位置によって見えなくなるかもしれないのでglDisable(GL_CULL_FACE);にした方が良いかも)
main_glfw2.cpp
simple.vert
simple.frag

[1] http://d.hatena.ne.jp/toburau/20140802/1406993965
[2] http://marina.sys.wakayama-u.ac.jp/~tokoi/GLFW.pdf
[3] http://www.glfw.org/docs/latest/monitor.html
[4] OpenGL 4 Shading Language Cookbook Second Edition
[5] Simple OpenGL example with GLFW, GLEW and OculusSDK 0.3.1
[6] Oculus Rift SDL2 OpenGL Demo
web拍手 by FC2
posted by シンドラー at 19:07 | Comment(0) | TrackBack(0) | Oculus Rift | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。