曲面の視覚的地平線の2点を見つける必要があります。
私は持っている:
- 4 つのコーナー ポイントの XYZ
- 2 つの曲線エッジのベジェ ポイントの XYZ
そして、次のいずれかを計算する必要があります。
- 2 つの水平点の XY
- 2 つの水平点の XYZ
注:前回この質問をしたときに解決策が得られましたが、両方の曲線の位置と回転に基づいて変化する地平線ポイントではなく、曲線の極値しか見つかりませんでした。
最初に曲線を回転させてコーナー ポイント間の接続が水平になるようにしてから、極値を計算すると機能しますか?
視覚的にテストするには、サンプル画像を約 150 度回転させます。
回転した画像 http://www.freeimagehosting.net/uploads/ad502509e9.png
この曲線の極値は正確に望む場所ではないことに注意してください。ただし、これはいくつかの要因によって引き起こされる可能性があります。たとえば、地平線の点をマークした方法がそれほど正確ではないようです。
サーフェスがどのように定義されているかはわかりませんが、2 つの 2 次ベジエ曲線で囲まれているだけです。このようなサーフェスを構築する方法はたくさんあり、構築する方法ごとに異なる地平線が得られます。したがって、この回答は当て推量になります。
水平線は、次に示すように、カメラからポイントへのベクトルがサーフェスに接するサーフェス上のポイントで構成されます。
二次ベジエ曲線にはパラメトリック方程式があります
B( t ) = (1 − <em>t) 2 P 0 + 2(1 − <em>t) t P 1 + t 2 P 2
これを t で微分すると、曲線の接線が得られます。
B'( t ) = 2( t − 1) P 0 + 2(1 − 2 t ) P 1 + 2 t P 2
これは、カメラ (原点) から曲線までのベクトルと平行です。
B( t ) × B'( t ) = 0
これをtについて解くと、地平線の曲線上に点ができます。これをサーフェス全体の地平線まで拡張する方法は、サーフェスがどのように構築されているかによって異なります。(おそらく、サーフェスの両端にある曲線の水平点を見つけて、それらを直線で結ぶことができますか?)
あなたが探しているものは、実際には地平線ではなくシルエットと呼ばれています。
これを行う最も簡単な方法は、法線がカメラの方向に向いているサーフェス部分 (内積が負) と、法線がカメラから離れた方向に向いているサーフェス部分 (内積が正) の境界を見つけることです。 .
三角形メッシュでは、法線を使用してこれを直接行うことができます。NURBS を使用すると、おそらくこれを行う閉じた式を見つけることができます。