From: Tim R. <ti...@us...> - 2004-07-18 13:00:06
|
Update of /cvsroot/csdopenglnet/csdOpenGL/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19528 Modified Files: gears.cs Log Message: and again a bit better Index: gears.cs =================================================================== RCS file: /cvsroot/csdopenglnet/csdOpenGL/samples/gears.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** gears.cs 18 Jul 2004 09:32:17 -0000 1.4 --- gears.cs 18 Jul 2004 12:59:57 -0000 1.5 *************** *** 118,229 **** glPopMatrix(); glutSwapBuffers(); } protected void gear( double inner_radius, double outer_radius, double width, int teeth, double tooth_depth ) { - double r0 = inner_radius; - double r1 = outer_radius - tooth_depth / 2.0; - double r2 = outer_radius + tooth_depth / 2.0; - double da = 2.0 * Math.PI / teeth / 4.0; int i; ! double ang, u, v, len; glShadeModel( GL_FLAT ); glNormal3d( 0.0, 0.0, 1.0 ); /* front face */ glBegin( GL_QUAD_STRIP ); ! for ( i=0; i<=teeth; i++ ) { ! ang = i * 2.0f * Math.PI / teeth; ! glVertex3d( r0 * Math.Cos( ang ), r0 * Math.Sin( ang ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( ang ), r1 * Math.Sin( ang ), width * 0.5 ); if ( i<teeth ) { ! glVertex3d( r0 * Math.Cos( ang ), r0 * Math.Sin( ang ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( ang + 3 * da ), r1 * Math.Sin( ang + 3 * da ), width * 0.5 ); } } glEnd(); ! /* front side of teeth */ glBegin( GL_QUADS ); da = 2.0 * Math.PI / teeth / 4.0; for ( i=0; i<teeth; i++ ) { ! ang = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( ang ), r1 * Math.Sin( ang ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( ang + da ), r2 * Math.Sin( ang + da ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( ang + 2 * da ), r2 * Math.Sin( ang + 2 * da ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( ang + 3 * da ), r1 * Math.Sin( ang + 3 * da ), width * 0.5 ); } glEnd(); glNormal3d( 0.0, 0.0, -1.0 ); ! ! /* back face */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<=teeth; i++ ) { ! ang = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( ang ), r1 * Math.Sin( ang ), -width * 0.5 ); ! glVertex3d( r0 * Math.Cos( ang ), r0 * Math.Sin( ang ), -width * 0.5 ); if (i<teeth) { ! glVertex3d( r1 * Math.Cos( ang + 3 * da ), r1 * Math.Sin( ang + 3 * da ), -width * 0.5 ); ! glVertex3d( r0 * Math.Cos( ang ), r0 * Math.Sin( ang ), -width * 0.5 ); } } glEnd(); ! ! /* back side of teeth */ glBegin( GL_QUADS ); da = 2.0 * Math.PI / teeth / 4.0; for ( i=0; i<teeth; i++ ) { ! ang = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( ang + 3 * da ), r1 * Math.Sin( ang + 3 * da ), -width * 0.5 ); ! glVertex3d( r2 * Math.Cos( ang + 2 * da ), r2 * Math.Sin( ang + 2 * da ), -width * 0.5 ); ! glVertex3d( r2 * Math.Cos( ang + da ), r2 * Math.Sin( ang + da ), -width * 0.5 ); ! glVertex3d( r1 * Math.Cos( ang ), r1 * Math.Sin( ang ), -width * 0.5 ); } glEnd(); ! /* draw outward faces of teeth */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<teeth; i++ ) { ! ang = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( ang ), r1 * Math.Sin( ang ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( ang ), r1 * Math.Sin( ang ), -width * 0.5 ); ! u = r2 * Math.Cos( ang + da ) - r1 * Math.Cos( ang ); ! v = r2 * Math.Sin( ang + da ) - r1 * Math.Sin( ang ); len = Math.Sqrt( u * u + v * v ); ! u = u / len; ! v = v / len; glNormal3d( v, -u, 0.0 ); ! glVertex3d( r2 * Math.Cos( ang + da ), r2 * Math.Sin( ang + da ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( ang + da ), r2 * Math.Sin( ang + da ), -width * 0.5 ); ! glVertex3d( Math.Cos( ang ), Math.Sin( ang ), 0.0 ); ! glVertex3d( r2 * Math.Cos( ang + 2 * da ), r2 * Math.Sin( ang + 2 * da ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( ang + 2 * da ), r2 * Math.Sin( ang + 2 * da ), -width * 0.5 ); ! u = r1 * Math.Cos( ang + 3 * da ) - r2 * Math.Cos( ang + 2 * da ); ! v = r1 * Math.Sin( ang + 3 * da ) - r2 * Math.Sin( ang + 2 * da ); glNormal3d( v, -u, 0.0 ); ! glVertex3d( r1 * Math.Cos( ang + 3 * da ), r1 * Math.Sin( ang + 3 * da ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( ang + 3 * da ), r1 * Math.Sin( ang + 3 * da ), -width * 0.5 ); ! glNormal3d( Math.Cos( ang ), Math.Sin( ang ), 0.0 ); } glVertex3d( r1 * Math.Cos( 0 ), r1 * Math.Sin( 0 ), width * 0.5 ); glVertex3d( r1 * Math.Cos( 0 ), r1 * Math.Sin( 0 ), -width * 0.5 ); ! glEnd(); ! ! glShadeModel( GL_SMOOTH ); ! /* draw inside radius cylinder */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<=teeth; i++ ) { ! ang = i * 2.0 * Math.PI / teeth; ! glNormal3d( -Math.Cos( ang ), -Math.Sin( ang ), 0.0 ); ! glVertex3d( r0 * Math.Cos( ang ), r0 * Math.Sin( ang ), -width * 0.5 ); ! glVertex3d( r0 * Math.Cos( ang ), r0 * Math.Sin( ang ), width * 0.5 ); } glEnd(); --- 118,234 ---- glPopMatrix(); + glPopMatrix(); + glutSwapBuffers(); } protected void gear( double inner_radius, double outer_radius, double width, int teeth, double tooth_depth ) { int i; ! double r0, r1, r2, angle, da, u, v, len; ! ! r0 = inner_radius; ! r1 = outer_radius - tooth_depth / 2.0; ! r2 = outer_radius + tooth_depth / 2.0; ! ! da = 2.0 * Math.PI / teeth / 4.0; glShadeModel( GL_FLAT ); glNormal3d( 0.0, 0.0, 1.0 ); + Console.WriteLine( width ); /* front face */ glBegin( GL_QUAD_STRIP ); ! for ( i=0; i<= teeth; i++ ) { ! angle = i * 2.0 * Math.PI / teeth; ! glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), width * 0.5 ); if ( i<teeth ) { ! glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), width * 0.5 ); } } glEnd(); ! /* front sides of teeth */ glBegin( GL_QUADS ); da = 2.0 * Math.PI / teeth / 4.0; for ( i=0; i<teeth; i++ ) { ! angle = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), width * 0.5 ); } glEnd(); glNormal3d( 0.0, 0.0, -1.0 ); ! ! /* back face */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<=teeth; i++ ) { ! angle = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), -width * 0.5 ); ! glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), -width * 0.5 ); if (i<teeth) { ! glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), -width * 0.5 ); ! glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), -width * 0.5 ); } } glEnd(); ! ! /* back sides of teeth */ glBegin( GL_QUADS ); da = 2.0 * Math.PI / teeth / 4.0; for ( i=0; i<teeth; i++ ) { ! angle = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), -width * 0.5 ); ! glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), -width * 0.5 ); ! glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), -width * 0.5 ); ! glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), -width * 0.5 ); } glEnd(); ! /* outward faces of teeth */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<teeth; i++ ) { ! angle = i * 2.0 * Math.PI / teeth; ! glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), width * 0.5 ); ! glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), -width * 0.5 ); ! u = r2 * Math.Cos( angle + da ) - r1 * Math.Cos( angle ); ! v = r2 * Math.Sin( angle + da ) - r1 * Math.Sin( angle ); len = Math.Sqrt( u * u + v * v ); ! u /= len; ! v /= len; glNormal3d( v, -u, 0.0 ); ! glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), -width * 0.5 ); ! glNormal3d( Math.Cos( angle ), Math.Sin( angle ), 0.0 ); ! ! glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), -width * 0.5 ); ! ! u = r1 * Math.Cos( angle + 3 * da ) - r2 * Math.Cos( angle + 2 * da ); ! v = r1 * Math.Sin( angle + 3 * da ) - r2 * Math.Sin( angle + 2 * da ); glNormal3d( v, -u, 0.0 ); ! glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), width * 0.5 ); ! glVertex3d( r2 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), -width * 0.5 ); ! glNormal3d( Math.Cos( angle ), Math.Sin( angle ), 0.0 ); } glVertex3d( r1 * Math.Cos( 0 ), r1 * Math.Sin( 0 ), width * 0.5 ); glVertex3d( r1 * Math.Cos( 0 ), r1 * Math.Sin( 0 ), -width * 0.5 ); ! glEnd(); ! glShadeModel( GL_SMOOTH ); glBegin( GL_QUAD_STRIP ); for ( i=0; i<=teeth; i++ ) { ! angle = i * 2.0 * Math.PI / teeth; ! glNormal3d( -Math.Cos( angle ), -Math.Sin( angle ), 0.0 ); ! glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), -width * 0.5 ); ! glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), width * 0.5 ); } glEnd(); |