#3
by うましゅー » 5年前
camera さんが書きました: ↑5年前
小さいなら、投影の行列にスケーリング行列をかませて、”拡大”してやればよいのでは。
全てのオブジェクトを個別に拡大するのではなく、
画面を拡大(ズーム)するという事です。
上記の通り変更を行い大きさに関してはなんとかなりましたが、軽く描画位置に関するずれがおきてしまいます。
画面上の中心に関してはずれを感じませんが上下左右にオブジェクトの位置が中心から遠ざかるとズレを大きく感じてしまいます。
コード:
//透視投影
D3DXMatrixPerspectiveFovLH(&m_matProj, D3DXToRadian(45.0f), (float)SCREEN_WIDTH / SCREEN_HEIGHT, 1.0f, 10000.0f);
//平行投影
D3DXMatrixOrthoLH(&m_matProj, (float)SCREEN_WIDTH, (float)SCREEN_HEIGHT, 1.0f, 10000.0f);
D3DXMatrixIdentity(&matScale);
D3DXMatrixScaling(&matScale, fabsf(vEyePt.z), fabsf(vEyePt.z), 1.0f); // 透視投影の場合Z軸が基本マイナスなのでfabsfを使用
D3DXMatrixMultiply(&m_matProj, &m_matProj, &matScale);
上記のコードはキー入力で投影方法が変わるように組んでいるのですが、スケーリング以外に何か行う必要があるのでしょうか?
予想では視野角が関係してるのでは?と思うのですが…
[quote=camera post_id=154387 time=1569986183 user_id=1]
小さいなら、投影の行列にスケーリング行列をかませて、”拡大”してやればよいのでは。
全てのオブジェクトを個別に拡大するのではなく、
画面を拡大(ズーム)するという事です。
[/quote]
上記の通り変更を行い大きさに関してはなんとかなりましたが、軽く描画位置に関するずれがおきてしまいます。
画面上の中心に関してはずれを感じませんが上下左右にオブジェクトの位置が中心から遠ざかるとズレを大きく感じてしまいます。
[code]
//透視投影
D3DXMatrixPerspectiveFovLH(&m_matProj, D3DXToRadian(45.0f), (float)SCREEN_WIDTH / SCREEN_HEIGHT, 1.0f, 10000.0f);
//平行投影
D3DXMatrixOrthoLH(&m_matProj, (float)SCREEN_WIDTH, (float)SCREEN_HEIGHT, 1.0f, 10000.0f);
D3DXMatrixIdentity(&matScale);
D3DXMatrixScaling(&matScale, fabsf(vEyePt.z), fabsf(vEyePt.z), 1.0f); // 透視投影の場合Z軸が基本マイナスなのでfabsfを使用
D3DXMatrixMultiply(&m_matProj, &m_matProj, &matScale);
[/code]
上記のコードはキー入力で投影方法が変わるように組んでいるのですが、スケーリング以外に何か行う必要があるのでしょうか?
予想では視野角が関係してるのでは?と思うのですが…