Así que estoy jugando con OpenGL y tratando de encontrar la manera de dibujar algunas formas divertidas.OpenGL Tube Along a Path
Ahora mismo, estoy trabajando en un tubo. Puedo dibujar un tubo recto muy bien con:
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();
}
Sin embargo, no he encontrado la manera de hacer que el tubo sigue ningún camino predefinido como una espiral, o incluso una simple línea. Si cambia y_change a algo así como 0.01, dibujará cada offset de segmento de tubo un 0.01 adicional en la dirección y. Eso es genial, pero ¿cómo puedo hacer que cada segmento se dirija en esa dirección? En otras palabras, en este momento, cada segmento se dibuja de modo que todos se dirigen en la misma dirección, y la dirección no es la dirección del tubo (ya que con y_change = 0.01, la dirección es ligeramente "arriba").
No estoy seguro de cómo proceder. He jugado con vectores obteniendo el vector entre el segmento anterior y el actual, pero no estoy seguro de qué hacer con eso más allá de eso.
¿Ha mirado (para un ejemplo) Ejemplo de toro del Libro Rojo? http://www.opengl.org/resources/code/samples/redbook/torus.c –