私はOpenGLで遊んでいて、楽しい図形を描く方法を考えようとしています。パスに沿ったOpenGLチューブ
今、私はチューブに取り組んでいます。私はうまく直管を描くことができます:
void tube(GLfloat radius, GLfloat segment_length) {
glPolygonMode(GL_BACK, GL_NONE);
glPolygonMode(GL_FRONT, GL_FILL);
glPushMatrix(); {
GLfloat z1 = 0.0;
GLfloat z2 = segment_length;
GLfloat y_offset = 0.0;
GLfloat y_change = 0.00;
int i = 0;
int j = 0;
for (j = 0; j < 20; j++) {
glPushMatrix(); {
glBegin(GL_TRIANGLE_STRIP); {
for (i = 360; i >= 0; i--) {
GLfloat theta = i * pi/180;
GLfloat x = radius * cos(theta);
GLfloat y = radius * sin(theta) + y_offset;
glVertex3f(x, y, z1);
glVertex3f(x, y, z2);
}
} glEnd();
} glPopMatrix();
// attach the front of the next segment to the back of the previous
z1 = z2;
z2 += segment_length;
// make some other adjustments
y_offset += y_change;
}
} glPopMatrix();
}
しかし、私は、チューブは、スパイラルのような任意の定義済みのパス、あるいはシンプルなラインをたどるようにする方法を考え出したていません。 y_changeを0.01などに変更すると、各チューブセグメントがy方向にさらに0.01オフセットされます。それは素晴らしいですが、どのように各セグメントをその方向に向けることができますか?言い換えれば、今のところ、各セグメントはすべて同じ方向を向くように描かれており、方向はチューブの方向ではありません(y_change = 0.01の場合、方向はわずかに上になります)。
私はどのように処理するかわかりません。私は前のセグメントと現在のセグメントの間にベクターを入れてベクターで遊んだことがありますが、それをどうしたらいいのか分かりません。
あなたは(1など)で、レッドブックのトーラスの例を見たことがありますか? http://www.opengl.org/resources/code/samples/redbook/torus.c –