モトクロスゲームの土地を引く


7

モトクロスゲームの土地を引きたいのですが。私はベジエ曲線について考えてきましたが、これが最善の方法であるかどうかはわかりません。アドバイスをいただけますか?私はJavaScriptでそれをしたいのですが、あまり良い選択ではありませんが、それは個人的なプロジェクトなので、しばらくは問題ありません。


1
なぜJavaScriptが悪い選択だと言っているのですか?確かにAAAの場合は悪い選択ですが、単純なオンラインゲームの場合良い選択です。
AttackingHobo

回答:


4

ベジエの代わりに、おそらくbスプラインまたはcatmull-romスプラインが必要です。

float bspline(float t, float p0, float p1, float p2, float p3)
{
  float it = 1.0f - t;

  float b0 = it*it*it * (1.0f / 6.0f);
  float b1 = (3*t*t*t - 6*t*t +4) * (1.0f / 6.0f);
  float b2 = (-3*t*t*t +3*t*t + 3*t + 1) * (1.0f / 6.0f);
  float b3 =  t*t*t * (1.0f / 6.0f);

  return     
    b0*p0 +
    b1*p1 +
    b2*p2 +
    b3*p3;
}

float catmullrom(float t, float p0, float p1, float p2, float p3)
{
  return 0.5f * (
          (2 * p1) +
          (-p0 + p2) * t +
          (2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t +
          (-p0 + 3 * p1 - 3 * p2 + p3) * t * t * t
          );
}

使用法:tの範囲は0から1で、値は2つの制御点間のスプラインを補間し、フロートp0、p1、p2およびp3は制御点(前、現在、次、および次)を表します。n次元の曲線を補間するには、軸ごとに1回だけ関数を呼び出します。

bsplinesとcatmull-romの実際的な違いは、基本的にはcatmull-romがすべての制御点を通過する一方で、bsplinesがよりスムーズになることです。


bspline式についての質問。目的は何であるfloat it = 1.0f - tと使用itのためのb0値は?キャットマルromではなく、なぜbsplineにそれを行うのですか?
chrismanderson、2011年

2

私は他の人に役立つかもしれないいくつかのリンクを見つけました:

JSでのベジェ実装のスクリプト例
http://jsfromhell.com/math/bezier

JavaScriptまたはActionScriptから使用して、ベジェパスに沿ってアニメーション化できます。
http://code.google.com/p/javascript-beziers/

オンライン描画スクリプト/プロット。いくつかのテストを行う場合に非常に役立ちます。
http://jsdraw2d.jsfiction.com/demo/curvesbezier.htm

少しの理論と実装例
http://13thparallel.com/archive/bezier-curves/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.