World of Goo のようなランダムな「グーボール」を生成するのは、どのようなアルゴリズムでしょうか。私はProccesingを使用していますが、一般的なアルゴリズムであれば何でも構いません。
つまるところ、丸みを帯びたボールを「ランダムに」作成する方法にかかっていると思いますが、完全に丸くはなく、それでもリアルに見えますか?
前もって感謝します!
World of Goo のようなランダムな「グーボール」を生成するのは、どのようなアルゴリズムでしょうか。私はProccesingを使用していますが、一般的なアルゴリズムであれば何でも構いません。
つまるところ、丸みを帯びたボールを「ランダムに」作成する方法にかかっていると思いますが、完全に丸くはなく、それでもリアルに見えますか?
前もって感謝します!
World of Goo でオブジェクトを現実的なものにするのは、その形状ではなく、オブジェクトの動作が (多かれ少なかれ) 2D 物理学の現実的なシミュレーションであるという事実です。
したがって、オブジェクトの動作をリアルにするようにしてください。
私は仕事からそのサイトを見ることができないので、これがあなたが探しているものかどうかわかりません. :)
円は、長軸と短軸が等しい楕円の特殊なケースです。つぶれたボールの形状は、軸の 1 つが他の軸よりも長い楕円です。軸にさまざまな長さを生成し、楕円を回転させて、この種の不規則な形状を得ることができます。
Unreasonが言ったように、World of Gooは形ではなく、物理シミュレーションです。
しかし、ボールのような不規則な形状を作成する簡単な方法は、円上のn個の頂点(点)V_1、V_2 ... V_nから始めて、それにランダムな変形を適用することです。これを行うには、いくつかの単一の頂点を単に移動することから、複雑な物理シミュレーションに至るまで、多くの方法があります。
いくつかのアイデア:
1)ランダムな頂点V_iを選択し、ランダムなベクトルTを選択し、そのベクトルをV_iへの変換(移動)として適用し、他のすべての頂点V_jにもTを適用しますが、V_iからの「距離」(距離jとiの間の絶対的な差、またはV_jからV_iまでの実際の幾何学的距離である可能性があります。スケーリング係数には、f(0)に対して1であり、距離が増加するために減少する任意の関数fを使用できます(基本的には動径基底関数)。
for each V_j
V_j = scalingFactor(distance(V_i, V_j)) * translationVector + V_j
2)1のようにV_iを移動しますが、ここで、隣接するすべての頂点間のばねのような接続をシミュレートし、引き伸ばされたばねによって生成される力に基づいてすべての頂点を繰り返し移動します。
3)より丸い形状の場合は、1)または2)Bスプライン曲線の制御点で実行できます。
頂点を移動しすぎる場合は、自己交差に注意してください。
テストされていない、いくつかの大まかなアイデア...
メタボール( wiki ) から始めるのもいいかもしれませんが、よくわかりません。
それ以外の場合は、ボールがくっつく多くのパーティクルで構成され、不規則性を与えるパーティクルアプローチをお勧めします (これには、すべてのパーティクルをまとめておくスプリング ボディを処理するための最小限の物理エンジンが必要であることに注意してください)。