Jak prawidłowo stworzyć wstęgę Mobiusa?

0

czesc.
od jakiegoś czasu próbuje zrobić wstęgę Mobiusa za pomoca freegluta.

powinno byc takie cos:

MobiusStrip.png

mam takie:

wstega.png

 for (double a = 0; a < 2 * PI; a += 0.2)
	{
		for (r = -1; r <= 1; r += 0.5)
		{
			glBegin(GL_LINE_STRIP);

			x = cos(a) *(2 + (r / 2 * cos(a / 2)));
			y = sin(a) *(2 + (r / 2 * cos(a / 2)));
			z = r / 2 * sin(a / 2);

			glVertex3f(x, y, z);


		}
		glEnd();
	}



	for (r = -1; r <= 1; r += 0.5)
	{

		for (double a = 0; a < 2 * PI; a += 0.2)
		{
			glBegin(GL_LINE_STRIP);

			x = cos(a) *(2 + (r / 2 * cos(a / 2)));
			y = sin(a) *(2 + (r / 2 * cos(a / 2)));
			z = r / 2 * sin(a / 2);

			glVertex3f(x, y, z);

		}
		glEnd();

zdaje sobie sprawe ze powinno byc zrobione za pomoca gl_quads ale nie mam pojecia jak ;oo

  • ten fakt, ze sie nie laczy ;/

ktos ma moze jakies sugestie?

0

Strzelam, że może chodzić o fragment a < 2 * PI w warunku pętli - prawdopodobnie ostatni przebieg powinien być z 2 PI.
Porównywanie liczb zmiennoprzecinkowych przy pomocy znaków większy mniejszy to niezbyt dobry pomysł rozdział "Porównywanie liczb zmiennoprzecinkowych" http://eduinf.waw.pl/inf/utils/001_2008/0119.php.

0

ktos cos wiecej?

wstega.png

glBegin(GL_QUAD_STRIP);

		for (double a = 0; a < 2 * PI; a += 0.2)
			{
				for (r = -1; r <= 1; r += 0.5)
				{
		
				x = cos(a) *(1 + (r / 2 * cos(a / 2)));
				y = sin(a) *(1 + (r / 2 * cos(a / 2)));
				z = r / 2 * sin(a / 2);

				glVertex3f(x, y, z);


				}
			}	
	glEnd();

	
	glBegin(GL_LINE_STRIP);

		for (r = -1; r <= 1; r += 0.5)
			{
				for (double a = 0; a < 2 * PI; a += 0.2)
				{
			
				x = cos(a) *(1 + (r / 2 * cos(a / 2)));
				y = sin(a) *(1 + (r / 2 * cos(a / 2)));
				z = r / 2 * sin(a / 2);

				glVertex3f(x, y, z);

				}
			}
	glEnd();

teraz mam takie cos, nic wiecej nie przychodzi mi do glowy ;c

1 użytkowników online, w tym zalogowanych: 0, gości: 1