カーソルを常に向いている間に2Dスプライトを回転させたい。カーソルの向きopenGL C++
私は喜んで、SDL2 & glmを数学に使用しています。
私が試みた「元の」方法は、オブジェクトの前と私の望むLookAtベクトルとの間の角度を計算し、角度を度で入れてglm::rotate
の行列にすることでした。 それはいくつかの奇妙な理由のためにうまくいかなかった。 もう1つの方法は、クォート内でそれを行い、モデル行列にクォートを適用することでしたが、どちらも役に立ちませんでした。
オブジェクトの中心が原点(0,0,0)に表示されるため、回転のための変換は必要ありません。
テクスチャを読み込む矩形を作るために2つの三角形を描画します。
マイモデル行列は、理論的には以下のようになります。
model = rotate * scale;
私は、シェーダにプラグイン(位置は私のvec3
頂点である場合)
position = projection * view * model * vec4(Position, 1.0f);
I場合は、最初の奇妙なことが、ありますハードコード90.0fを角度としてglm::rotate
に入力すると、オブジェクトは実際に時計回りに約120°回転します。 80°のプラグを差し込むと、実際に時計回りに約250°回転します。 45度に差し込むと時計回りに45度回転します。 全ての回転は例えば、z軸の周りにある:
model = glm::rotate(model, 90.0f, glm::vec3(0.0f,0.0f,1.0f);
私は方向性をシミュレートするために、四元数を使用している場合、それは私が0,2 & 0.9ラジアンの間の角度与え、私のオブジェクトのみを回転させているようです0.0°&の時計回りに45°の間で、どこにカーソルを置いても問題ありません。
角度btwを計算すると、私の2つのベクトル(ObjectLookAt & MousePosition)とそれらを格納しても、私はかなり正確な角度を取得しますが、glm :: rotate関数は期待通りに機能しません。最後に
私は単に角度コーディングする場合:それは実際にはさらに多くの奇妙な回転1で始まり
float angle = static_cast<float>(SDL_GetTicks()/1000);
を。 私はそれが1秒(1秒で始まる)でレートを開始し、360秒以上経過するまでz軸を中心に完全な円を回転させることを期待しています。 しかし、約6秒で360°回転します。角に追加されて度合いとしてglm::rotate
に差し込まれた「1」は60°を表します。
これは私のロジックの欠陥ですか?スプライトがx-y平面上に描かれている場合、z軸の周りを回転させませんか? 私はここでもx軸&を試してみましたが、これはうまくいきませんでした。 ..私は本当にすべてが「2D」に起こる特にとして、私はそれは理論的には動作するはずですどのように取得する(と思う)、ここで立ち往生していますが、私はそれが仕事を得ることができない
は、特に、高速のために、ありがとうございました応答!それは、より良い、奇妙なそれは[ドキュメント](https://glm.g-truc.net/0.9.3/api/a00147.html#gaacb9cbe8f93a8fef9dc3e25559df19c0)で角度が度で与えられるべきだと言う.. 残りは今私の数学をやっているはずです。 – Schloemmel