2014年12月29日

OpenGLでビルボードのテスト その4

年末年始は油断するとすぐ終わってしまうので困ったものです。今回はビルボードの復習です。

billboard004_001.png

上の図のように、ビルボードはワールド座標で指定するのではなく、正規化デバイス座標系やスクリーン座標系で指定するとわかりやすくなります。しかし、正規化デバイス座標系やスクリーン座標系で指定した場合は、それをワールド座標に戻してボリゴンを描画しないと画面に表示することができません。

CGで線形代数が必要な部分ですが、座標変換を行列計算で行っているので、逆行列を使えば正規化デバイス座標系やスクリーン座標系をワールド座標に変換することができます。

billboard004_002.png

この辺の変換をきちんと把握していると、シェーダが読みやすくなりますね。ここでこの行列を掛けているから、今は視点座標系のデータだな…とか。

billboard004_003.png

今回は正規化デバイス座標系をワールド座標に戻したいので、ViewProjection行列の逆行列を、適当に設定したスクリーン座標4つに掛けてあげればワールド座標に戻すことができます。

実行結果

ティーポットとビルボードを表示しています。視点を回転させていて、ティーポットはそのまま、ビルボードは視点の方向に向くことを確認しています。

billboard004_004.png

glut+glmを使用したサンプルコード
billboard_004.cpp
web拍手 by FC2
posted by シンドラー at 23:40 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2014年12月26日

画像の極座標変換について その2

今頃気づきましたが、画像の極座標変換のところにコメントをいただいていました。手法など全然説明していないので自分で読んでもどうやっていたのか良くわからないですね。というわけで一応解説とOpenCV使ったサンプルソースコードを作ってみました。

polar_image_001.png

[1]を上の式で変換した結果(polarTest)
polar_image_dst.png

polar_image_002.png


[2]"Photo by DAVID ILIFF. License: CC-BY-SA 3.0"を上の式で変換した結果(polarTest2)
polar_image_dst2.png

ソースコード
opencv_polar.cpp
(2015.10.29追記:atan2(dx, dy)はatan2(dy, dx)の間違いです)

[1] http://www.mvision.co.jp/WebHelpIM/_RESOURCE/Filter_Mvc_Polar.html
[2] Helvellyn Striding Edge 360 Panorama, Lake District
web拍手 by FC2
posted by シンドラー at 17:49 | Comment(0) | TrackBack(0) | Image Processing | このブログの読者になる | 更新情報をチェックする

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年12月09日

GSLを用いた球面調和関数の計算 その8

あぴミクさんモデルでのテストが終わりました。OpenCLを使用しても、1頂点1秒とすると、2万頂点で2万秒(6時間弱)ほどかかりますので、もうちょっと高速化が必要かもしれません。

実行結果

今回は半球ではなく全球で遮蔽情報を計算しましたが、本来は半球で計算するべきかもしれません。後、完全に遮蔽されている頂点があると真っ暗になり、その頂点に隣接する面が必要以上に暗くなってしまっていますので、真っ暗な場合にもある程度0番目の項にだけ値を設定する等の工夫が必要かもしれません。



たまに表示されないみたいなのでその場合はDOWNLOADを押してみてください。

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

2014年12月06日

GSLを用いた球面調和関数の計算 その7

遮蔽情報の計算が怪しかったので修正してみました。

SH_GSL07_001.png

SH_GSL07_002.png

実行結果

床を平面で作ったので、端っこの頂点がほぼ遮蔽されずに明るくなりすぎていますが、何となくそれっぽくできていると思います。計算に時間がかかりますが、あぴミクさんのモデルでの再計算をやりたいと思います。



動的変形に対応した手法までやる気力がないので、あぴミクさんでうまく行ったらとりあえずは大体試せたことになりますかね。
web拍手 by FC2
posted by シンドラー at 00:14 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2014年12月03日

GSLを用いた球面調和関数の計算 その6

前回の続きです。

球面調和関数の係数を線形補間すると、滑らかに変化するのかどうか試してみることにしました。

昼・夕方・夜っぽい3枚のパノラマ画像を[1]から使用させていただき、ぞれぞれ3次の球面調和関数近似を行い、係数を線形補間してみました。

実行結果

背景はmix関数で混ぜているのですが、何かおかしいですね。雰囲気的にはうまくいっているような気はしますが、どちらかというとモデルの頂点毎の遮蔽情報の計算が怪しそうです。

背景と遮蔽情報の内積のみ

テクスチャの色と上記の混合


[1] http://www.nicovideo.jp/watch/sm10968092

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