私は現在OpenGL FrameWork/Engineに取り組んでおり、OpenGLの部分までは私の結果にかなり満足しています。 一方、私はカメラを動作させるのに深刻な問題があります。 Z軸に沿って動くのはうまくいくが、暴れ始めると(X軸に沿って動く)、シーン全体がねじ込まれる。 strafingの結果を下の画像で見ることができます。 左の部分は実際のシーンを示し、右の部分はひずみの動きによるシーンを示しています。OpenGL Camera Strafing doesnt work
私のコードは以下の通りです。コンストラクタで :「更新」方法 - では
//Info is a Struct with Default values
m_projectionMatrix = glm::perspective(
info.fieldOfView, width/height, //info.fov = 90
info.nearPlane, info.farPlane // info.near = 0.1f, info.far = 1000
);
//m_pos = glm::vec3(0.0f,0.0f,0.0f), info.target = glm::vec3(0.0f, 0.0f, -1.0f)
m_viewMatrix = glm::lookAt(m_pos, m_pos + info.target, Camera::UP);
//combine projection and view
m_vpMatrix = m_projectionMatrix * m_viewMatrix;
私は現在、次のことをやっている:私の知る限りでは
glm::mat4x4 Camera::GetVPMatrix()
{
m_vpMatrix = glm::translate(m_vpMatrix, m_deltaPos);
return m_vpMatrix;
}
: 投影行列は、実際の透視図を実現しています。ビューマトリックスは、最初は、シーン全体を平行移動して回転させ、中央に配置します。 なぜVP-MatrixをZ値で翻訳するのがうまくいくのですか?
私はこのようなカメラの動作を実現したいと思います: 初期Cam Posは(0,0,0)で、 "Center"は例えばです。 (0,0、-1)となる。 X = 5での変換後:Cam Posは(5,0,0)、Centerは(5,0、-1)です。
編集:追加質問。 VP座標変換によってZ座標が適用されるのはなぜですか?
ありがとうございました! 最高の、Christoph。
が、これは「生成しません「ターゲット」中心ビュー? Glm lookAtは目標点に焦点を当てた行列を生成しなければならないので、実際の歪みの動きは達成されません。さらに、回転に進むと、同じ問題が発生するでしょうか? – Christoph
あなたのコードを見ると、あなたの目標は、世界の固定小数点ではなく、m_posの任意のオフセットに過ぎません。これは、カメラの位置が移動するにつれて、ターゲットも移動することを意味します。私はあなたがカメラをカメラに対して固定方向に「見る」ようにしていたので、これをしたと仮定しました。 – Fibbles
はい、それは私が欲しいものです。カメラが横向きになると、フォーカスポイントがこれを行う必要があります。「見出し」は変更しないでください。 – Christoph