私はC\C++ とOpenGLで3 年の経験があります。しかし、私はこのシステムに取り組む方法についての考えを持っていません。
これはとても信じがたいことです。
何が必要:
- マーチング キューブ アルゴリズム。 または、特許が心配な場合は、四面体を行進します。
- メタボール式
メタ粒子システムは、「放出」「エネルギー」するいくつかの「メタボール」で構成されています。メテボールから放出される「エネルギー」は正/負の場合があり、通常はメタボールからの距離で減衰します。Falloff はポイント ライトに似ていますが、ポイントの代わりに任意の数学的物体を使用できる点が異なります (距離を計算できる限り)。
空間内の任意のポイントについて、メタボール システムの「エネルギー」は、たとえば、システム内のすべてのメタ ボディのすべてのエネルギー (距離とともに減衰することを覚えていますか?) の合計になります。
ここで、この「エネルギー フィールド」が与えられると、等値面 (またはその他のプロシージャル サーフェス) を視覚化するかのように、メタボディ システムを視覚化します。
空間の任意の点で、「エネルギー」が特定のしきい値を下回っている場合、その点はメタ粒子によって形成された「メッシュ」の外にあります。「エネルギー」がそのしきい値を超えている場合、ポイントはメタ粒子によって形成された「メッシュ」の内側にあります。
2 点で線分が得られ、線分を知ることで、線分がメッシュの「表面」と交差する点を計算できます。
ここで、「マーチング キューブ」アルゴリズムを使用して空間の特定の領域を歩くだけで、メッシュが得られます。
法線は、メッシュの表面にある点の小さなオフセット (x/y/z +- 0.01 など) でエネルギー レベルをサンプリングすることによって計算されます。
この説明が難しい場合は、nvidia SDK にマーチング キューブ アルゴリズムの例があったと思います。例を読んで、同じ考えをメタ粒子に適用してください。
このアルゴリズムで得られるものは次のとおりです。