はかせのラボ

私の頭の中を書いていく雑記ブログです

プログラミング 平行投影の値ってどう設定したらええんや?

あいさつ

どうも、はかせです。
今回も平行投影でのスケーリング問題の奮闘記です。

XMMatrixOrthographicLH

前回の記事で書き忘れた関数です。
この関数は平行投影で使うプロジェクション行列を返してくれます。

こいつに適切な値を渡せさえすれば。
私の悩みは完全に解決される・・・はずです。
詳細はいつもどおりリファレンスで
docs.microsoft.com

それぞれ簡単に説明
・ViewWidth...横幅
・ViewHeight...縦幅
・NearZ...投影し始める距離
・FarZ...投影し終える距離

ぶっちゃけNearZとFarZは描画範囲の指定なんで割とどうにかなるんですが、
問題はViewWidthとViewHeightです。
ここに素直にウィンドウのサイズ渡したら前回のミジンコになったわけです。

色んなとこ見てるとここには
それぞれ何Unit入れるかって値・・・ぽいです。
Unitてのは1の単位のことで、
使うAPIミドルウェアによって1Unitがどれくらいなのか決まるみたいです。

つまり私は今後
・DirectX11での1Unitの大きさを調べる
・今までと同じような結果にするためには何Unitにすればいいか考える

ってのをやれば良さげです。

ちなみに今

今はこんなコードでやってみて

auto yscale = 1.0f / mParam.mRatio;
auto viewWidth = 10.0f / 2.0f;
auto viewHeight = viewWidth * yscale;
auto nearZ = 1.0f / (1000.0f - 0.3f);
auto farZ = 1000.0f;
mProj = XMMatrixOrthographicLH(viewWidth,viewHeight,nearZ,farZ);

(UE4を参考にしました)

結果がこちら
f:id:hakase0274:20190710233836p:plain
f:id:hakase0274:20190710233846p:plain

惜しい・・・
けどUIの位置とかは透視投影での調整だからむしろあっているのか・・・?

あとがき

今回は平行投影の値の話でした。
正直もう色々値を弄ってみて合うやつを探すのが最速な気がしてきました。

うまい計算方法などがあれば教えてくださいm(__)m
それでは今回はこの辺でノシ