//cylinder int nslice = 36; glBegin( GL_QUAD_STRIP); GLfloat t = 0.; GLfloat dt = (360. / nslice) * 3.1416 / 180.; for (int j = 0; j <= nslice; ++j) { glNormal3f( cos(t), 0., sin(t)); glVertex3f( cos( t), 0., sin( t)); glVertex3f( cos( t), 2., sin( t)); t = t + dt; } glEnd(); // torus // return a point on the torus for u,v both on [0, 2pi] // where v = radians around a meridian // u = radians "swept" around the axis Vector p( float u, float v ) { float r_maj = 5.0; // distance from origin to center of a meridian float r_min = 2.0; // radius of a meridian return( Vector(cos(u)*(r_maj+r_min*cos(v)), sin(u)*(r_maj+r_min*cos(v)), r_min*sin(v) ) ); } Vector n( float u, float v ) { Vector N; N.x = cos(v)*cos(u); N.y = cos(v)*sin(u); N.z = sin(v); N.normalize(); return( N ); } int num_steps_u = 30; int num_steps_v = 15; const float PI = 3.14159265359; float step_u = (2*PI)/(float)num_steps_u; float step_v = (2*PI)/(float)num_steps_v; glBegin( GL_QUADS ); for( float u = 0; u < 2 * PI; u += step_u ) { for( float v = 0; v < 2 * PI; v += step_v ) { Vector P[4], N[4]; P[0] = p( u, v ); P[1] = p( u+step_u, v ); P[2] = p( u+step_u, v+step_v ); P[3] = p( u, v+step_v ); N[0] = n( u, v ); N[1] = n( u+step_u, v ); N[2] = n( u+step_u, v+step_v ); N[3] = n( u, v+step_v ); for( int c = 0; c < 4; c++ ) { glNormal3f( N[c].x, N[c].y, N[c].z ); glVertex3f( P[c].x, P[c].y, P[c].z ); } } } glEnd(); //helix curve int angle = 0, spcount = 5; GLfloat x, y, z=0; GLfloat r = 2, b = 0.002; GLfloat radia= 3.1415926/180, theta = 0; glBegin(GL_LINE_STRIP); for(angle = 0; angle < 360*spcount; angle += 1) { theta = angle*radia; x = r * cos(theta); y = r * sin(theta); glVertex3f(x,y,z); z+= b; } glEnd(); //duble helix suface int angle = 0, spcount = 1; GLfloat x, y, z, x1, y1, z1=0; GLfloat r = 2, b = 0.02; GLfloat pi = 3.1415926; GLfloat radia= pi/180, theta = 0; glBegin(GL_QUAD_STRIP); //glBegin(GL_LINE_STRIP); for(angle = 0; angle < 360*spcount; angle += 1) { theta = angle*radia; x = r * cos(theta); y = r * sin(theta); glVertex3f(x,y,z); z+= b; x1 = r * cos(theta+pi); y1 = r * sin(theta+pi); glVertex3f(x1,y1,z1); z1+= b; } glEnd(); //mobius strip int angle = 0, spcount = 1; GLfloat x, y, z, x1, y1, z1=0; GLfloat r = 2, l = 1; GLfloat pi = 3.1415926; GLfloat radia= pi/180, theta = 0; glBegin(GL_QUAD_STRIP); for(angle = 0; angle <= 360; angle += 1) { theta = angle*radia; x1 = l*sin(theta/2)*cos(theta); y1 = l*sin(theta/2)*sin(theta); z1 = l*cos(theta/2); glVertex3f(r*cos(theta)+x1, r*sin(theta)+y1, z1); glVertex3f(r*cos(theta)-x1, r*sin(theta)-y1, -z1); } glEnd(); //Mobuis strip wired mesh int angle = 0, spcount = 1; GLfloat x, y, z, x1, y1, z1=0; GLfloat r = 2, l = 1; GLfloat pi = 3.1415926; GLfloat radia= pi/180, theta = 0; glPolygonMode( GL_FRONT, GL_LINE ); glPolygonMode( GL_BACK, GL_LINE ); glColor3f(1.0, 1.0, 0); glBegin(GL_QUAD_STRIP); for(angle = 0; angle <= 360; angle += 5) { theta = angle*radia; x1 = l*sin(theta/2)*cos(theta); y1 = l*sin(theta/2)*sin(theta); z1 = l*cos(theta/2); glVertex3f(r*cos(theta)+x1, r*sin(theta)+y1, z1); glVertex3f(r*cos(theta)-x1, r*sin(theta)-y1, -z1); } glEnd();