Witam. Mam pytanie odnośnie OpenGl - rysowania sprężyny chodzi o zrozumienie kodu. Zadaniem było narysowanie sprężyny według tego wzoru:

xi = cos(ti)*(3+cos(ui))
yi = sin(ti)*(3+cos(ui))
zi=0.6*ti+sin(ui)

i mamy taki kod

glBegin(GL_QUADS);
	for (float t = 0; t < T; t += dt) {
		sint = sinf(t);
		cost = cosf(t);
		sint2 = sinf(t + dt);
		cost2 = cosf(t + dt);
		c[0][0] = c[3][0] = RATIO * t / T;
		c[1][0] = c[2][0] = RATIO * (t + dt) / T;

		for (float u = 0; u < U; u += du) {
			sinu = sinf(u);
			cosu = cosf(u);
			sinu2 = sinf(u + du);
			cosu2 = cosf(u + du);

			v[0][0] = cost * (3 + cosu);
			v[0][1] = sint * (3 + cosu);
			v[0][2] = size * t / T + sinu;
			n[0][0] = v[0][0] - cost * 3;
			n[0][1] = v[0][1] - sint * 3;
			n[0][2] = v[0][2] - size * t / T;
			
			v[1][0] = cost2 * (3 + cosu);
			v[1][1] = sint2 * (3 + cosu);
			v[1][2] = size * (t + dt) / T + sinu;
			n[1][0] = v[1][0] - cost2 * 3;
			n[1][1] = v[1][1] - sint2 * 3;
			n[1][2] = v[1][2] - size * (t + dt) / T;

			c[0][1] = c[1][1] = u / U;

			v[2][0] = cost2 * (3 + cosu2);
			v[2][1] = sint2 * (3 + cosu2);
			v[2][2] = size * (t + dt) / T + sinu2;
			n[2][0] = v[2][0] - cost2 * 3;
			n[2][1] = v[2][1] - sint2 * 3;
			n[2][2] = v[2][2] - size * (t + dt) / T;

			v[3][0] = cost * (3 + cosu2);
			v[3][1] = sint * (3 + cosu2);
			v[3][2] = size * t / T + sinu2;
			n[3][0] = v[3][0] - cost * 3;
			n[3][1] = v[3][1] - sint * 3;
			n[3][2] = v[3][2] - size * t / T;
			
			c[2][1] = c[3][1] = (u + du) / U;

			for (int i = 0; i < 4; i++) {
				glTexCoord2fv(c[i]);
				glNormal3fv(n[i]);
				glVertex3fv(v[i]);
			}
		}
	}
	glEnd();

No i ogólnie rozumiem mniej więcej że glBegin bierze wierzchołki czwórkami i każda 4 wierzchołków między GlBegin a GLEnd to jeden czworokąt, zaś ta ostatnia pętla generuje 4 wierzchołki ustawiając wektory normalne i współrzędne tekstury. Ale za co odpowiadają pozostałe 2 pętle? i ogólnie nie rozumiem tego zapisu tych v dlaczego są 3 czyli przykładowo v[0][0] , v[0][1] ,v[0][2]? bo rozumiem że każdy taki bloczek przykładowo ten:

	                v[1][0] = cost2 * (3 + cosu);
			v[1][1] = sint2 * (3 + cosu);
			v[1][2] = size * (t + dt) / T + sinu;
			n[1][0] = v[1][0] - cost2 * 3;
			n[1][1] = v[1][1] - sint2 * 3;
			n[1][2] = v[1][2] - size * (t + dt) / T;

to jest jakby jeden wierzchołek? Proszę o wytłumaczenie