0

私は現在、実際に 3D メッシュの「カット」ツールとして機能するアプリケーションを作成しています。それは私の最初のアプリケーションであるため、解決方法がわかりません。

モデルをオブジェクト ファイルからキャンバスにロードし、同じキャンバスでマウス ドラッグ イベントを使用して線を描画し、切断点を定義します。

ボールを半分に切りたいとしましょう。真ん中に線を引きます。線の下にあるボールの頂点を検出するにはどうすればよいですか?

次に、ボールを回転/平行移動すると、すべての頂点情報が変更されますか?

4

2 に答える 2

1

現実の世界で何をするか考えてみてください。ボールを線で切ることはできません。ナイフを使用する必要があります (線にはボリュームがありません)。ボールをカットするには、ナイフをボールに通さなければなりません。

つまり、あなたが見ているのは線ではなく平面です。このような平面を取得するには、3D 演算を使用する必要があります。あなたが持っているのは、キャンバスの向きと平面の「側面図」(線のように見える)です。

したがって、探している平面はキャンバスに対して垂直です。このような平面を取得する簡単な方法は、キャンバスの向きを取得して同じ向きの平面を作成し、線を中心に平面を 90° 回転させることです。

その後、モデルのすべてのエッジを調べて、それらが平面のどちら側にあるかを判断できます。このために、エッジの終点が平面のどちら側にあるかを決定します。外積を使用します。それらが同じ側にある場合 (外積の両方の結果が同じ符号を持つ)、エッジを無視できます。それ以外の場合は、エッジと平面の交点を決定する必要があります。新しいエッジを作成し、それに応じて接続します。

数学の背景については、このページを参照してください。しかし、opengl ライブラリでこれらすべてのヘルパー メソッドを見つける必要があります。

ボールを回転/移動すると、すべての頂点情報が変更されますか?

もちろん。

于 2009-10-15T07:17:01.900 に答える
1

そう簡単にはいきません。

あなたが描いている線は、球を切断する平面を誘導すると思います。

そのためには、球と平面の交差面積を計算する必要があります。

これは簡単な作業ではありません。これには既存のフレームワークを使用することをお勧めします。または、本当に自分でこれを行いたい場合は、基本的な交差問題について読んで、この種の問題の感覚をつかむことをお勧めします。このペーパーは、さまざまな交差テストの優れた紹介を提供します。

一般に、あなたの場合のように、表現された境界ボリュームは、より高度な操作に関しては扱いが困難です。球体を半分に切るのは、小さな穴をバリであけるよりも簡単です。場合によっては、四面体メッシュやCSGなどのボリューム表現を使用する方がよい場合があります。

2 番目の質問については、球体を回転または平行移動したり、カメラを回転および平行移動したりしないでください。

于 2009-10-15T07:18:08.333 に答える