スプラインに沿って 3D チューブを生成しようとしています。スプラインの座標 (x1、y1、z1 - x2、y2、z2 - など) が黄色で示されています。これらのポイントで円を生成する必要があり、その頂点は後のスタジアムで接続されます。円は、正しいチューブを形成するために、スプラインの 2 つの線分セグメントの「角」に対して垂直である必要があります。セグメントは、説明のために低く保たれていることに注意してください。
[どうやら画像の投稿は許可されていないので、このリンクで画像をご覧ください] http://img191.imageshack.us/img191/6863/18720019.jpg
スプラインの各点で各リングの頂点を計算できる限りですが、それらはすべて同じ平面上、つまり同じ角度になっています。「脚」に従って回転させる必要があります(たとえば、AとBはCです)。
私はこれを熟考し、次のことを考えました。
- 2 つの線分は 2 つのベクトルとして見ることができます (図 A & B)
- コーナー (図 C) は、頂点のリングを計算する必要がある場所です。
- すべての頂点が存在する平面を見つける必要があります
- 次に、この平面 (=ベクトル?) を使用して、C である中心点から新しいベクトルを計算できます。
- 半径* sinとcosを使用してx、y、zを見つけます
しかし、私はこれの数学の部分で本当に混乱しています。内積について読みましたが、この場合の適用方法がわからないスカラーが返されます。
誰かが私を正しい方向に向けることができますか?
[編集] 状況についてもう少し情報を提供するには:
ポリゴンを形成するためのインデックスを持つ別のバッファを指定すると、3 つのグループで頂点位置を記述し、OpenGL ES によって接続されるフロートのバッファを作成する必要があります。
チューブに形を与えるために、最初に float の配列を作成しました。これは、3 次元空間のコントロール ポイントを 3 つのグループで表します。
次に、セグメント密度の変数とともに、これらのコントロール ポイントを関数に渡します。この関数は、これらのコントロール ポイントを使用して CatmullRom スプラインを作成し、これをフロートの別の配列の形式で返します。キャットマルロムスプライン.
これらの頂点のそれぞれで、密度が異なる頂点のリングを作成したいと考えています(滑らかさの量/リングごとの頂点)。
以前の頂点 (制御点と catmull rom スプラインを記述する頂点) はすべて破棄されます。
チューブ リングを形成する頂点のみが OpenGL に渡され、OpenGL はそれらを接続して最終的なチューブを形成します。
catmullrom スプラインを作成し、その頂点の位置にリングを作成することはできますが、それらはすべて、スプライン パスをたどるのではなく、同じ角度の平面上にあります。
[/編集]
ありがとう!