3

私は数週間問題に取り組んできましたが、自分のアプローチを過度に複雑にしないようにしたいところまで来ました。これは iOS の OpenGL ES 2.0 で行われていますが、原則は普遍的であるため、答えが純粋に数学的な形式であることは気にしません。これが概要です。

次の式でベジエ曲線を生成するために使用している制御点とともに、3D 空間に 2 つの点があります。

B(t) = (1 - t) 2 P 0 + 2(1 - t)tP 1 + t 2 P 2

始点/終点はかなり大きな球体の動的座標に配置されているため、x/y/z は大きく変化し、静的ソリューションはあまり実用的ではありません。現在、GL_LINE_STRIP を使用してポイントをレンダリングしています。次のステップは、GL_TRIANGLE_STRIP を使用して曲線をレンダリングし、高さに対する幅を制御することです。

この簡単な議論によると、私の問題を解決する良い方法は、曲線の方向を考慮して、両側に沿って曲線に平行な点を見つけることです。合計 3 つの曲線を作成し、インデックスを渡してさまざまな幅のベジェ曲線を作成し、それを描画したいと思います。

また、それぞれの質問の特定の問題を解決するように見える補間Loop-Blinn 手法の使用についての話もあります。ただし、解決策は、私が求めているものには複雑すぎると思います。テクスチャをミックスに持ち込むことにも興味がありません。後でシェーダーで計算する色を使用して三角形を描画することを好みます。

したがって、Trilinear Interpolation、Catmull-Rom スプライン、Loop-Blinn の論文をさらに読んだり、サンプリングをさらに詳しく調べたりする前に、どの方向が最善の策である可能性が最も高いかを確認したいと思います。問題の最も基本的な形は、3D 空間でポイントを取得し、次のポイントがプロットされる方向を考慮して、それに沿って 2 つの平行なポイントを見つけることだと言えると思います。

お時間をいただきありがとうございます。他にご不明な点がございましたら、お知らせください。追加できるよう最善を尽くします。

4

1 に答える 1

2

この回答は、(私が見る限り)質問で言及した方法のいずれかを支持していませんが、この状況で私が行うことです。

曲線の正規化された法線 (または従法線) を計算します。正規化された法線を取り、それを t ( ) の関数として持っているとしましょうN(t)。これを使用して、オフセット ポイント P を計算するヘルパー関数を作成します。

P(t, o) = B(t) + o * N(t)

ここoで、法線方向の曲線の符号付きオフセットを意味します。

この関数が与えられると、曲線の左右のポイントを次のように単純に計算できます。

Points = [P(t, -w), P(t, w), P(t + s, -w), P(t + s, w)]

w達成したい曲線の幅はどこですか。

次に、これらの点を 2 つの三角形で結びます。

トライアングル ストリップで使用する場合、これはインデックスを意味します。

0 1 2 3

編集

曲線を処理するには、通常、Frenet フレームを計算します。

これは、指定されたパラメータ値 (t) でカーブの向きを与える 3 つのベクトル (接線、法線、従法線) のセットです。

Frenet フレームは次の式で与えられます。

unit tangent = B'(t) / || B'(t) ||
unit binormal = (B'(t) x B''(t)) / || B'(t) x B''(t) ||
unit normal = unit binormal x unit tangent

この例xでは、2 つのベクトルの外積を表し、|| v ||囲まれたベクトルの長さ (またはノルム) を意味しvます。

ご覧のとおり、曲線の一次導関数B'(t)( ) と二次導関数 ( ) が必要です。B''(t)

于 2012-06-06T17:41:49.833 に答える