3

モデル エディターを作成しているときに、レイ トレーシングを有効にする以外に、レイと三角形のベジエ パッチの間の交点について非常に適切な近似を見つけたいいくつかの操作について考えることができます。

これを行う方法?私はいくつかの方法を知っていますが、おそらくもっと良い方法があります。

正確な使用例: マウスで詳細な形状を描画するための基準面として、1 つのベジェ三角形パッチを使用したい場合があります。私も、そのようなパッチから分割ポイントを特定したいと思うかもしれません。

そのための C ソース コードがあれば、それも見たいと思うかもしれません。おそらく、自分のコードをローリングする代わりに使用することさえできます。

4

2 に答える 2

2

Triangular Bezier Clipping (PDF)を実装することをお勧めします。

ただし、三角パッチをテンソル積のベジエ パッチに変換するという別の可能性もあります。これを行う利点は、テンソル積のベジエがより多くサポートされるため、使用できるコードが見つかる可能性が高くなることです。変換は簡単です:

  • 三角パッチを一連の n+1 行のコントロール ポイントとして表示します (n は次数)。
    • 最初の行には 1 つのコントロール ポイントがあり、各行には最後の行よりも 1 つ多いコントロール ポイントがあります。
  • ここで、各行を適切な次数 (次数 0 から次数 n) のベジエ曲線として扱います。
  • 各行を次数 n に昇格
    • 各行には n+1 個のコントロール ポイントがあり、n+1 x n+1 グリッドのコントロール ポイントが形成されます。
  • この点のグリッドは、次数 n × n のベジエ パッチとして取得され、三角形と同一の面です。

交点を見つけるだけの場合、これはうまく機能するはずです。ただし、テンソル積パッチは縮退している (一方の端に一致する点がある) ため、縮退したコーナーに近づくと、数値的な問題が発生することがあります。また、三角形のドメインにマッピングすると、テクスチャ マッピングなどの作業が少し難しくなる可能性があります。したがって、少し実装を気にしない場合は、より直接的な三角ベジエ クリッピングを使用することをお勧めします。

于 2010-03-16T23:21:15.310 に答える
0

I'm not familiar with triangular bezier patch, but if it can always be contained within a triangle then, if the ray intersects the triangle, it must intersect the curve inside it too.

If the above is true, then you can search the curve between the two vertices whose side intersects the ray for a point that is close enough to the ray. I guess you can do binary search on the curve parameter in this region to get that point.

于 2010-03-16T22:13:39.310 に答える