私はしばらくの間、インターネット上でいくつかのアルゴリズムをいじっていましたが、それらを機能させることができないようです。そのため、ここで質問を投げかけます。
ポイントから速度ベクトル ラインをレンダリングしようとしています。線を引くのは難しくありません。長さのある線をvelocity.length
グラフに挿入するだけです。これにより、y 軸方向の点を中心に線が配置されます。これを適切な回転と平行移動で取得する必要があります。
並進ベクトルの計算は難しくありません。速度ベクトルの半分です。しかし、回転行列は私には非常にとらえどころのないものです。方向ベクトルが与えられた場合、<x, y, z>
必要な行列は何ですか?
編集1:見てください。質問を理解していないと、おそらく答えられないでしょう。
これが私が現在持っているものです:
Vector3f 変換 = 新しい Vector3f(); translation.scale(1f/2f, body.velocity); Vector3f vec_z = (Vector3f) body.velocity.clone(); vec_z.normalize(); Vector3f vec_y; // 参照ベクトル、後で修正します もし (vec_z.x == 0 && vec_z.z == 0) { vec_y = new Vector3f(-vec_z.y, 0f, 0f); // 最適化できます } そうしないと { vec_y = 新しい Vector3f(0f, 1f, 0f); } Vector3f vec_x = new Vector3f(); vec_x.cross(vec_y, vec_z); vec_z.normalize(); vec_y.cross(vec_x, vec_z); vec_y.normalize(); vec_y.negate(); Matrix3f 回転 = 新しい Matrix3f( vec_z.z、vec_z.x、vec_z.y、 vec_x.z、vec_x.x、vec_x.y、 vec_y.z、vec_y.x、vec_y.y ); arrowTransform3D.set(回転、平行移動、1f);
この記事に基づいています。はい、標準の回転行列 (vec_x.x、vec_y.x など) を試しましたが、うまくいきませんでした。列と行を回転させて、効果があるかどうかを確認しました。
編集2:
私のコメントの失礼な言葉遣いについてお詫び申し上げます。
つまり、2 つのエラーが組み合わさったようです。そのうちの 1 つは House MD が指摘したこと (変数の名前付けが本当に悪い: vec_z
was reallyvec_y
など) であり、もう 1 つは、マトリックスをレンダリング エンジンに渡す前に反転する必要があることでした (転置は近い!)。したがって、変更されたコードは次のとおりです。
Vector3f vec_y = (Vector3f) body.velocity.clone(); vec_y.normalize(); Vector3f vec_x; // 参照ベクトル、後で修正します if (vec_y.x == 0 && vec_y.z == 0) { vec_x = new Vector3f(-vec_y.y, 0f, 0f); // 最適化できます } そうしないと { vec_x = 新しい Vector3f(0f, 1f, 0f); } Vector3f vec_z = new Vector3f(); vec_z.cross(vec_x, vec_y); vec_z.normalize(); vec_x.cross(vec_z, vec_y); vec_x.normalize(); vec_x.negate(); Matrix3f 回転 = 新しい Matrix3f( vec_x.x、vec_x.y、vec_x.z、 vec_y.x、vec_y.y、vec_y.z、 vec_z.x、vec_z.y、vec_z.z ); 回転.反転();