2

Conical Helix パスを転がるボールのリアルな 3D デモンストレーションを作成したいと思います。解決策に近づくのに役立ったリファレンスは、ここにあります。[Stage3D を使用して Actionscript 3 でソリューションを作成していますが、他の 3D フレームワークを使用して、他の言語で提案されたコーディング ソリューションがあれば喜んで提供します。

投稿のタイトルを入力すると、システムは豊富な「あなたの答えが既にあるかもしれない質問」を示してくれました。既存のスレッドを乗っ取るつもりはありませんが、このスレッドには一般的な主題に関する非常に役立つコメントがたくさん含まれていると言わざるを得ませんが、私が解決できなかった特定の課題には触れていません。

引用された参照を使用して、ボールがたどりたいパスをトレースするこのコード スニペットに満足しています。[ NB私の参考文献、および他のほとんどの数学ベースの参考文献は、Z をアップダウンとして扱います。ただし、私の使用法は、アップダウン用の Y のより一般的な 3D グラフィックスです。]

このコードはフレームごとに実行されます。

ft += 0.01; // Where ft is a global Number.
var n:Number = Math.pow (0.5, (0.15 * ft));
// Where s is a constant used to scale the overall path.
obj.moveTo (
    (s * n * Math.cos (2.0 * ft)),
    (s * n),
    (s * n * Math.sin (2.0 * ft))
    );

ボールは適切なパスをたどり、照明やその他のシェーダー コードのおかげで、非常に適切な効果がシーンに表示されます。

私の現在の実装で良くない点は、ボールが点から点へと移動するときに、そのパスに沿ってボールが転がっているように見えないことです。私は物理エンジンを使用しておらず、衝突を処理する解決策も探していませんが、ボールがトラックを転がり落ちたために動きがあった場合に何が起こるかをボールに正しく示してもらいたいです。

したがって、課題をもう少し明確にするために、ボールが #15 のストライプとラベルが付いたビリヤード ボールであるとしましょう。その場合、視覚的な結果は、数字の 15 が頭をひっくり返しているはずですが、おそらく私のobj.moveTo()関数の名前から推測できるように、3D オブジェクトの位置が変化するだけです。 、向きではありません。

最後に、特定の質問/要求に行き着きます。パスに沿ってポイント 1 からポイント 2 に移動した場合にビリヤード ボールがどのように表示されるかを正しく示すために、どの回転の変更を各位置の変更と同期させる必要があるかを発見できませんでした。

ソリューションの一部は次のようになります。

obj.setRotation ((Math.atan2 (Math.sin (ft), Math.cos (ft))), Vector3D.Y_AXIS);

しかし、それはまだ正しくありません。レンダリング コードに追加できるよく知られた数式があることを願っています。

4

0 に答える 0