私はオブジェクトを表示するプログラムを持っています。 まず、ファイルから位置p.x、p.y、p.zおよび位取りs.x、s.y、s.zをロードします。 次に、それらを4x4 ModelMatrixに適用し、多くの変換とスケール操作を実行します。OpenGL - glm変換と縮尺設定
私が最初にオブジェクトをロードすると、私はp
とs
値を使用します。プログラムの中に私は規模と翻訳の操作を実行して、バックファイルへのpとsの値を保存しながら
modelMatrix = glm::mat4(1.0));
/*Translations*/
modelMatrix = glm::translate(modelMatrix, glm::vec3(p.x, p.y, p.z));
modelMatrix = glm::scale(modelMatrix, glm::vec3(s.x, s.y, s,z));
を。
void Display::Translate(double x, double y, double z)
{
modelMatrix = glm::translate(modelMatrix, glm::vec3(x,y,z));
p.x += x; //that way p is composition of all translations
p.y += y;
p.z += z;
}
void Display::Scale(double x, double y, double z)
{
modelMatrix = glm::scale(modelMatrix, glm::vec3(x,y,z));
s.x *= x; //that way s is composition of all scalings
s.y *= y;
s.z *= z;
}
今の問題は、(プログラムを再度実行している)、再びロードした後に、オブジェクトが、私はそれらを保存場所ではありませんが、いくつかのではなく、ランダムな場所ということです。 (特に翻訳)。 私は間違った方法で変換を構成していますか(翻訳ではx、y、zに加え、スケーリングで掛ける)?
あなたが私たちに言わせてもらえなかったので、あなたがファイルに保存して読み込んでいるものが何であるか分かりません - あなたのエラーがそこに見つかる可能性が高いからですが、その変換がaren可換性 - 最初に翻訳を行い、その後にスケールを行うと、結果は一般的なケースで最初にスケールを実行してから翻訳と異なることになります。変換をファイルに保存する場合は、すべての変換の合計とすべてのスケールの合計ではなく、完全な変換行列を保存します。 – Cubic