ポイントのリストで定義されたパスに沿ってチューブを描きたいです。
私が考えたのは、基本的に各ポイントの周りに円を描き、GL_QUAD_STRIPを使用して円(またはむしろ円上のポイント)を接続できるということです。
したがって、円上にポイントを作成するための私のコードは次のようになります。
point_of_circle[0] = pathVertices[i][0] + TUBE_RADIUS * cos(j/TUBE_SEGMENTS * 2*M_PI));
point_of_circle[1] = pathVertices[i][1] + TUBE_RADIUS * sin(j/TUBE_SEGMENTS * 2*M_PI));
point_of_circle[2] = pathVertices[i][2];
ここi
で、はパス頂点のインデックス(つまり、チューブを描画する元のポイントの1つ)であり、j
は作成中の円の現在のポイントのインデックスです(0からTUBE_SEGMENTS
)。
さて、問題は、この方法で円を作成すると、それらは常に同じ方向に向けられることです(円はすべて互いに「平行」でありpoint_of_circle[2] = pathVertices[i][2]
、いつものように見えます)。構造は適切なチューブのようには見えません。
私ができることは、描画しているパスに接するベクトルを計算することだと思いました。次に、計算された接線に応じて、円を正しい方向に向ける必要があります。
たとえば、計算された接線がである場合0,0,1
、コードはそのままである必要があります。ただし、接線を他の方法で計算する場合は、円を回転させる必要があります。
たとえば、計算された接線がである場合0,1,0
、y座標は円全体で同じである必要があり、z軸に沿って見ている場合は、円の水平セグメントのみが表示されます。
接線が1,0,0
であった場合、z軸に沿って見ると、円の垂直セグメントが表示されます。
計算された接線に応じて円を適切に作成するコードを作成するにはどうすればよいですか?私の説明が十分に明確であることを願っています。私はOpenGLとほとんどの3D数学の初心者です。