⚠ ローカルファイルとして開いています。Chromeのセキュリティ制限によりコンソール警告が出ますが動作に影響はありません。

ベジエ曲面のUV検出

ベジエクリッピング法によるレイ・曲面交差計算 — 画面座標(x,y)からUV座標を検出
★ 形状選択
32パッチ / 290制御点
★ 画面座標→UV座標 検出(レイトレーシング)
クリックでUV検出
※詳しい説明は画面最下部を参照
(曲面をクリックしてください)
★ 抽出モード
f は 8×8 次のベジエ関数(透視)
光源方向は下の「表示設定」内のスライダーで調整します(曲面の陰影と共通)
★ ベジエクリッピング設定
0=パッチ単位のみ判定(粗い) 8=最大細分化(高精度・低速)
末端パッチ内をマーチングスクエアで細分(線分抽出)
包絡線クリップを使う
OFF にすると単純4分割のみになり、判定ノード数の差が統計に現れます
表示設定
半透明曲面
曲面ワイヤ
曲面は各点の解析的な法線(Sᵤ×S_v)と下の光源方向とのランバート反射で陰影付けしています
輪郭線
表裏を色分け
パッチ境界線
線画モード
UV分割図(右下)
統計
パッチ数
f の次数
判定ノード数
凸包で棄却
クリップで収縮
輪郭線分数
計算時間
🖱 ドラッグ → 視点回転/🖱 ホイール → ズーム/🖱 クリック → UV座標検出(走査範囲=マウス指定の場合)
「走査範囲」を画面全体に切替えると、常時計算している輪郭線のスクリーン上バウンディングボックス内を 指定間隔で走査し、ヒットしたパッチ番号を色分け表示します(視点を変えたら再度「走査を実行」してください)。

■ ベジエクリッピング法によるレイ・曲面交差(レイトレーシング)
クリック位置を通る視線レイを、そのレイを含む2枚の平面(法線 n1, n2 はレイ方向に直交かつ互いに直交)の交線として表す。 各曲面の制御点をこの2平面までの符号付き距離に射影すると、2つの3×3次ベジエ関数 g1(u,v) = n1・(S−o)g2(u,v) = n2・(S−o)(o=レイ原点)が得られ、 交点はまさに g1=0 かつ g2=0 となる (u,v) である。 列・行ごとの最小/最大係数がつくる包絡線(safeRangeBiv:本来は輪郭線抽出のUV範囲クリップに使う関数)を g1, g2 それぞれに適用してu方向の安全範囲を求め、その積集合でu方向をクリップ→続けてv方向をクリップ、 という操作をu, v交互に反復すると、制御点の凸包性により交点UVへ収束する。 収束が遅い場合(複数交点や接線的交差)は4分割して両方を追跡する。
視点: 左ドラッグ / ズーム: ホイール / クリック: UV座標検出