我正在尝试使用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之类的值,那么就会在每个管道段偏移0.01的y方向上进行绘制。这很好,但是我怎样才能使每个段指向那个方向呢?换句话说,现在每个段都是面向相同的方向绘制的,而且方向并不是管道的方向(因为y_change=0.01时,方向略微向上)。
我不确定该怎么办。我曾经尝试过通过获取前一段和当前段之间的矢量来玩弄向量,但除此之外,我不太清楚要做什么。