4

単一の 3D 3 次ベジエ曲線を使用して「3D リボン」をレンダリングしようとしています (リボンの幅は一定です)。最初と最後の制御点には法線ベクトルが関連付けられています (これらの点の接線に対して常に垂直であり、それらの点でのリボンのサーフェス法線を記述します)。法線ベクトルをスムーズに補間しようとしています。カーブのコース。

たとえば、文字「C」を形成する曲線が与えられ、最初と最後の制御点の両方が上向きのサーフェス法線を持っている場合、リボンは平らに始まり、地面に平行になり、ゆっくりと回転し、次に平らに終わり、最初のコントロールポイントと同じ方法。これを「スムーズに」行うには、カーブの途中で外側を向く必要があります。現時点では (この場合)、すべてのサーフェスを上向きにすることしかできませんでした (中央の外側ではありません)。これにより、中央に醜い遷移が作成されます。

説明するのは非常に難しいので、この例の現在の外観 (すべての面が上を向き、中央で鋭く反転) とどのように見えるか (滑らかな移行、面がゆっくりと回転) を示すいくつかの画像を以下に添付しました。銀色のフェイスが前面、黒色のフェイスが背面を表します。

正しくありません。現在の外観は次のとおりです。

正しいリボン http://img211.imageshack.us/img211/4659/ribbonincorrect.th.png

正しい、それはどのように見えるべきか:

正しくないリボン http://img515.imageshack.us/img515/2673/ribboncorrect.th.png

私が本当に必要としているのは、3D 3 次ベジエ曲線上の任意の点に対してこの「ハイブリッド法線ベクトル」を計算できることだけです。ポリゴンを問題なく生成できますが、スムーズに回転させる方法がわかりません。描かれているように。どうやって進めていくか完全に行き詰った!

4

1 に答える 1

2

この回答の最初の部分で説明したアルゴリズムを使用できます。t=0(または固定tのいずれかを選択)で法線を評価すると、スムーズな遷移が得られます。

このような:

代替テキスト

(青赤の境界線に沿った歩道を想像してみてください)

編集

わかりました、これは私が別の方法で得たものです:

代替テキスト

手順は簡単です。

パラメータ化された機能を使用します。

f[t] := { x[t], y[t], z[t] }  

導関数をとって接線ベクトルを計算します。

f'[t] := { x'[t], y'[t], z'[t] }  

たとえば、開始(および終了法線ベクトル)を選択します。

n[0] = {0, 0, 1};

次に、別の関数を導関数と法線のベクトル積として定義します。

cp[t_] := CrossProduct[f'[t], n[0]];  

以上です。

私の四辺形のポイントは次のとおりです。

 {f[t] - cp[t]/3, 
  f[t] + cp[t]/3, 
  f[t + dt] + cp[t + dt]/3, 
  f[t + dt] - cp[t + dt]/3}  

ここで、dtは必要な増分です。

より洗練されたアプローチがカーブパスの長さを説明するかもしれませんが、それはアルゴリズムの2番目の反復だと思います。

HTH!

于 2010-12-26T23:26:30.147 に答える