0

私は unity3d を初めて使用します。アニメーション オブジェクトのパスを作成したいと考えています。パスは # 楕円形の円 # または # ばね形状のパスでなければなりません # 数学の方程式に基づいてこのパスを描く方法があると思いますが、本当ですか? または、3dmax を使用して描画する必要があります。この問題のヘルプまたは関連するチュートリアルはありますか?

ありがとう

4

1 に答える 1

1

これは、ゲームでマウスを使ってパスを描くのに役立つリンクです。

プログラムでスプリングを描画したい場合は、Catmullrom または Bezier スプラインを使用できます。

double bezier(double t, double p0,double p1,double p2,double p3){
    double t2 = t*t;
    double t3 = t2 * t;
    return (0.16667 *(  t3  *   (-p0 +  3 * p1 + -3 * p2 + p3) +    \
                    t2  *   (3 * p0 + -6 * p1 + 3 * p2) +       \
                    t   *   (-3*p0 + 3*p2) +                    \
                    1   *   (p0 + 4*p1 + p2)));
}
double catmullrom(double t, double p0,double p1,double p2,double p3){
    double t2 = t*t;
    double t3 = t2 * t;
    return (0.5 *(      (2 * p1) + (-p0 + p2) * t +(2*p0 - 5*p1 + 4*p2 - p3) * t2 +(-p0 + 3*p1- 3*p2 + p3) * t3));
}

入力 p0、p1、p2、p3 は、特定のセグメントの 4 つの制御点です。らせん状の建物の例を見るために、このコードの残りの部分は私の Github ページ にあります。特にBuildPath ()を見て、これらの関数を使用して連続パスを構築する方法を確認してください。外部アカウントへのリンクは嫌いですが、私の使用例は SO の回答には少し大きすぎます。

楕円を描きたい場合、私が考える最も簡単な方法は、基本方程式を解いて点の輪を作ることです。

List<Vector3> pts = new List<Vector3>();
for(float x=-2.0f; x<2.0f;x+=0.1){
    y = sqrt( (1-x^2/a^2) * b^2 );//from eq. x^2/a^2 + y^2/b^2=1; 
    pts.Add(new Vector3(x,y,0));
}

そのコードは、水平主軸があることを前提としています。ここで、「a」は水平主軸の半径、「b」は垂直副軸の半径です。最初に X/Y 軸に沿って楕円を作成し、楕円の向きを変えるために必要な変換を適用します。

または、このコードはありませんが、一般的なパラメトリック方程式を使用して、すでに原点から離れた回転楕円を生成できます。

于 2013-01-09T01:35:54.363 に答える