C++でプログラミングの練習を行っている者です。
DX11の3D空間の射影変換についての質問です。
透視射影と平行射影を混ぜた射影変換を行いたいです。
そこで、この2つの違いはビューポートの近平面と遠平面の大きさの比率の違いにあると考えました。
近平面と遠平面の大きさを変更し、2つの射影の中間の大きさにすればこれが行えるのではないかと思いました。
そのために、ビューポートの近平面と遠平面の大きさをそれぞれ変更したいです。
実現したいこと
- ビューポートの近平面と遠平面の大きさをそれぞれについて変更する方法を知りたい
発生している問題・エラーメッセージ
近平面の大きさは設定できるものの、遠平面の大きさを変えることができない。
試したこと
D3DXMatrixPerspectiveLH、D3DXMatrixOrthoLH、D3DXMatrixPerspectiveOffCenterLH、D3DXMatrixPerspectiveFovLHを試してみたが、設定された近平面の大きさによって遠平面の大きさが自動的に決まっているのか、うまくいかなかった。
その他の関数を調べてみたが、近平面と遠平面の大きさをそれぞれ設定できるものが見つからなかった。
試したソースコード
float fovY = 1.0f; // Y方向の視野角 float aspect = (float)SCREEN_WIDTH / SCREEN_HEIGHT; // 画面のアスペクト比 float zn = 1.0f;// ビューボリュームの近平面までの距離 float zf = 1000.0f; // ビューボリュームの遠平面までの距離 //プロジェクションマトリクス設定 D3DXMATRIX projectionMatrix; //D3DXMatrixPerspectiveFovLH(&projectionMatrix, fovY, aspect, zn, zf); //------------------------------------------------------- {float nearH = zn * tan(fovY / 2.0f) * 2.0f * 1; // 近平面の縦幅 = zn * tan(Y方向の視野角/2) * 2 float nearW = nearH * aspect * 1; // 近平面の横幅 = 近平面の縦幅 * アスペクト比 //透視投影 D3DXMatrixPerspectiveLH(&projectionMatrix,nearW,nearH,zn, zf); //正投影 //D3DXMatrixOrthoLH(&projectionMatrix,nearW * 4,nearH * 4,zn, zf); //D3DXMatrixPerspectiveOffCenterLH( // &projectionMatrix, // -nearW * 1, // nearW * 1, // -nearH * 1, // nearH * 1, // zn, // zf //); }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/14 05:48
2022/06/14 07:51
2022/06/14 08:01
2022/06/14 08:05
2022/06/15 00:58