0

友達と私は 3D プリンターを開発しています。マイクロコントローラのプログラミングを含むハードウェアのことを終えました。次に、既存の 3D モデルを分析します。これには、特定の座標 (3d) が印刷する 3D モデル (FBX モデル) の内側にあるか外側にあるかを確認する方法が含まれます。現時点では、Unity3D と XNA を検討しています。バウンディング ボックスで何ができるかはわかりましたが、これは XNA の問題を解決するスマートな方法ではありません。だから私の質問は、この情報を取得するスマートな方法があるということです。

応援ありがとうございました;-)

4

3 に答える 3

1

アルゴリズム

ポイントが凹包内にあるかどうかを判断する方法を探しています。これは、 Point in Polygonアルゴリズムを 3 次元に拡張することで実行できます。

アイデアは、ポイントを介してレイをキャストし、ボリュームのハル (ポリゴン) との交点を計算することです。ポイントの両側の光線と三角形の交点の数が奇数の場合、ボリュームの内側にあります。

パフォーマンスが問題になる場合でも、簡素化されたバウンディング ボリュームが役立ちます。レイとポリゴンの交点の計算にコストがかかる場合は、最初に、パフォーマンスのコストが低いメッシュの近似ハル (バウンディング ボックス、凸包など) 内にポイントがあるかどうかを確認します。そうすれば、ポイントを早期に破棄できます。

Point in Polygon アルゴリズムと C での実装の別の詳細な説明を次に示します。

適切なプログラミング環境の選択

このタスクに XNA や Unity を使用する理由が正確にわかりません。もちろん、どちらも 3D モデルをロードする機能を提供しますが、よりシンプルで効率的な代替手段があることは間違いありません。

前述のアルゴリズムでは、モデルの頂点位置と三角形の定義にアクセスする必要があります。それ以上は必要ありません。FBX が必須でない場合は、 Wavefront OBJファイル形式を検討することをお勧めします。テキストベースのフォーマットで、理解しやすく解析しやすく、ほぼすべてのプロフェッショナル 3D モデリング アプリケーションでサポートされています。

FBX必要な場合でも、自分で解析するか、既存の 3D コンバーターを使用することができます。

于 2013-01-23T17:53:35.893 に答える
0

そのようなタスクにはボクセルを使用します。3Dプリンターはすべての軸に沿ってある程度の解像度を持っているため、ボクセルスペースに対して同様の解像度を想定できます。ボクセルフィールド値のプリンターの動きへの変換は比較的簡単なので、最も難しいのはメッシュをボクセルに変換することです。そのためのライブラリを見つけることができると確信しています。

ここから始めることができます: ボクセルグラフィックスC ++ライブラリを知っていますか?

于 2013-02-11T14:16:06.457 に答える
0

ポイントがソリッド(閉じたサーフェスのセット)内にあるかどうかをテストするための非常に迅速な解決策(数学をまったく必要としない)は、すでに推測したように3Dゲームエンジンを使用することです。ルシウスが指摘するように、それはハエを粉砕するためにクレーンを使用するようなものです。しかし、それはごくわずかな労力で機能します。

これを確認するために、私はPanda3Dを使用する前にこれを実行しました(そして、ほぼすべての3Dエンジンを使用できても驚かないでしょう)。

衝突検出は役に立ちました。Luciusが指摘したように、サーフェスを検出する必要があります。したがって、パンダが「RayCollider」(基本的には線)と呼ぶものを使用して、3Dモデルのサーフェスと交差する回数を確認します。Pandaには、これを行うためのヘルパー関数がすでに用意されており、SDKをダウンロードするときにRayCollidersを使用してサーフェスを検出するフルコードの例が多数含まれています。

次に、すべてのx、y、zスペースを反復処理し、パンダヘルパー関数を使用して光線の原点を移動するのは簡単なことです。奇数のサーフェスと衝突する場合は、内部にいます。そうでなければ、あなたは外にいます。

Panda3Dのフルコードの例と比較すると、このタスクは実際には非常に簡単です。学習曲線は、ほとんどの場合、数学ではなくエンジンに慣れるために費やされます。

于 2013-03-19T18:54:04.100 に答える