#include <windows.h> #include <GL/glut.h> #include <math.h>/* Declare four two-time surface objects */ Gluquadricobj *quadobj1; Gluquadricobj *quadobj2; Gluquadricobj *quadobj3; Gluquadricobj *quadobj4; static float light_ambient[] = {0.1,0.1,0.1,1.0}; static float light_diffuse[] = {0.5,1.0,1.0,1.0}; static float light_position[] = {90.0,90.0,150.0,0.0}; static float front_mat_shininess[] = {60.0}; static float front_mat_specular[] = {0.2,0.2,0.2,1.0}; static float front_mat_diffuse[] = {0.5,0.5,0.28,1.0}; static float back_mat_shininess[] = {60.0}; static float back_mat_specular[] = {0.5,0.5,0.2,1.0}; static float back_mat_diffuse[] = {1.0,0.9,0.2,1.0}; Static float imodel_ambient[] = {1.0,1.0,1.0,1.0}; Static float imodel_twoside[] = {Gl_true}; Static float imodel_oneside[] = {Gl_false}; void Myinit (void) { /* Set Background color * * Glclearcolor (1.0,1.0,1.0,1.0);
Glenable (gl_depth_test); Gldepthfunc (gl_lequal);
/* Set the Light/* GLLIGHTFV (gl_light0,gl_ambient,light_ambient); GLLIGHTFV (Gl_light0,gl_diffuse,light_diffuse); GLLIGHTFV (gl_light0,gl_position,light_position);
/* Set Material * * GLMATERIALFV (Gl_front,gl_diffuse,front_mat_diffuse); GLMATERIALFV (Gl_front,gl_specular,front_mat_specular); GLMATERIALFV (gl_front,gl_shininess,front_mat_shininess);
GLMATERIALFV (Gl_back,gl_diffuse,back_mat_diffuse); GLMATERIALFV (Gl_back,gl_specular,back_mat_specular); GLMATERIALFV (gl_back,gl_shininess,back_mat_shininess);
/* Set the LIGHTING model parameters * * GLLIGHTMODELFV (gl_light_model_ambient,imodel_ambient); GLLIGHTMODELFV (Gl_light_model_two_side,imodel_twoside);
/* Activation Care * * Glenable (gl_lighting); Glenable (GL_LIGHT0); Glshademodel (Gl_smooth); } void Mydisplay (void) { Glclear (Gl_color_buffer_bit|gl_depth_buffer_bit); /* Create four two-time surface objects */ QuadObj1 = Glunewquadric (); QuadObj2 = Glunewquadric (); QuadObj3 = Glunewquadric (); QuadObj4 = Glunewquadric (); /* Draw a cylindrical body * * Glpushmatrix (); Gluquadricdrawstyle (Quadobj1,glu_fill); Gluquadricnormals (Quadobj1,gl_flat); Gluquadricorientation (Quadobj1,glu_inside); Gluquadrictexture (quadobj1,gl_true); glcolor3f (1.0,1.0,0.0); Glrotatef (30,1.0,0.0,0.0); Glrotatef (40,0.0,1.0,0.0); Glucylinder (quadobj1,2.0,2.0,9.0,20.0,8.0); Glpopmatrix (); /* Draw a sphere * * Glpushmatrix (); Gluquadricdrawstyle (Quadobj2,glu_silhouette); Gltranslatef ( -5.0,-1.0,0.0); Glusphere (quadobj2,3.0,20.0,20.0); Glpopmatrix (); /* Draw a disc * * Glpushmatrix (); Gluquadricdrawstyle (Quadobj3,glu_line); Gltranslatef ( -2.0,4.0,0.0); Gludisk (quadobj3,2.0,5.0,15.0,10.0); Glpopmatrix (); /* Draw a part of the disc * * Glpushmatrix (); Gluquadricdrawstyle (Quadobj4,glu_point); Gltranslatef ( -3.0,-7.0,0.0); Glupartialdisk (quadobj4,2.0,5.0,15.0,10.0,10.0,100.0); Glpopmatrix (); /* Delete Four two-time surface object Objects * * Gludeletequadric (QUADOBJ1); Gludeletequadric (QUADOBJ2); Gludeletequadric (QUADOBJ3); Gludeletequadric (QUADOBJ4); Glflush (); } void Myreshape (int w,int h) { Glviewport (0,0, (Glsizei) W, (Glsizei) h); Glmatrixmode (gl_projection); Glloadidentity (); Gluperspective (45.0, (glfloat) w/(glfloat) h,1.0,50.0); Glmatrixmode (Gl_modelview); Glloadidentity (); Gltranslatef (0.0,0.0,-25.0); } int main (int argc,char * * argv) { /* Initialize * * Glutinit (&ARGC,ARGV); Glutinitdisplaymode (glut_single| glut_rgb| Glut_depth); Glutinitwindowsize (400,400); Glutinitwindowposition (100,100);
/* Create window * * Glutcreatewindow ("DRAW quadric OBJECTS");
/* Draw and display * * Myinit (); Glutreshapefunc (Myreshape); Glutdisplayfunc (Mydisplay);
Glutmainloop (); return 0; } |