Advertisement
rana1704

12 spheres with color

Dec 1st, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdlib.h>
  2. #include <GL/glut.h>
  3.  
  4. /*  Initialize z-buffer, projection matrix, light source,
  5.  *  and lighting model.  Do not specify a material property here.
  6.  */
  7. void init(void)
  8. {
  9.    GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 };
  10.    GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  11.    GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
  12.    GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 };
  13.    GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };
  14.    GLfloat local_view[] = { 0.0 };
  15.  
  16.    glClearColor(0.0, 0.1, 0.1, 0.0);
  17.    glEnable(GL_DEPTH_TEST);
  18.    glShadeModel(GL_SMOOTH);
  19.  
  20.    glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
  21.    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
  22.    glLightfv(GL_LIGHT0, GL_POSITION, position);
  23.    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
  24.    glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
  25.  
  26.    glEnable(GL_LIGHTING);
  27.    glEnable(GL_LIGHT0);
  28. }
  29.  
  30. /*  Draw twelve spheres in 3 rows with 4 columns.
  31.  *  The spheres in the first row have materials with no ambient reflection.
  32.  *  The second row has materials with significant ambient reflection.
  33.  *  The third row has materials with colored ambient reflection.
  34.  *
  35.  *  The first column has materials with blue, diffuse reflection only.
  36.  *  The second column has blue diffuse reflection, as well as specular
  37.  *  reflection with a low shininess exponent.
  38.  *  The third column has blue diffuse reflection, as well as specular
  39.  *  reflection with a high shininess exponent (a more concentrated highlight).
  40.  *  The fourth column has materials which also include an emissive component.
  41.  *
  42.  *  glTranslatef() is used to move spheres to their appropriate locations.
  43.  */
  44.  
  45. void display(void)
  46. {
  47.    GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };
  48.    GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };
  49.    GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 };
  50.    GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };
  51.    GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
  52.    GLfloat no_shininess[] = { 0.0 };
  53.    GLfloat low_shininess[] = { 5.0 };
  54.    GLfloat high_shininess[] = { 100.0 };
  55.    GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};
  56.  
  57.    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  58.  
  59. /*  draw sphere in first row, first column
  60.  *  diffuse reflection only; no ambient or specular
  61.  */
  62.    glPushMatrix();
  63.    glTranslatef (-3.75, 3.0, 0.0);
  64.    glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  65.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  66.    glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  67.    glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  68.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  69.    glutSolidSphere(1.0, 16, 16);
  70.    glPopMatrix();
  71.  
  72. /*  draw sphere in first row, second column
  73.  *  diffuse and specular reflection; low shininess; no ambient
  74.  */
  75.    glPushMatrix();
  76.    glTranslatef (-1.25, 3.0, 0.0);
  77.    glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  78.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  79.    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  80.    glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
  81.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  82.    glutSolidSphere(1.0, 16, 16);
  83.    glPopMatrix();
  84.  
  85.    /*  draw sphere in first row, second column
  86.  *  diffuse and specular reflection; low shininess; no ambient
  87.  */
  88.    glPushMatrix();
  89.    glTranslatef (1.25, 3.0, 0.0);
  90.    glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  91.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  92.    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  93.    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
  94.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  95.    glutSolidSphere(1.0, 16, 16);
  96.    glPopMatrix();
  97.  
  98.    glPushMatrix();
  99.    glTranslatef (3.75, 3.0, 0.0);
  100.    glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  101.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  102.    glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  103.    glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  104.    glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
  105.    glutSolidSphere(1.0, 16, 16);
  106.    glPopMatrix();
  107.  
  108.    glPushMatrix();
  109.    glTranslatef (-3.75, 0.0, 0.0);
  110.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  111.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  112.    glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  113.    glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  114.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  115.    glutSolidSphere(1.0, 16, 16);
  116.    glPopMatrix();
  117.  
  118.    glPushMatrix();
  119.    glTranslatef (-1.25, 0.0, 0.0);
  120.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  121.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  122.    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  123.    glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
  124.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  125.    glutSolidSphere(1.0, 16, 16);
  126.    glPopMatrix();
  127.  
  128.    glPushMatrix();
  129.    glTranslatef (1.25, 0.0, 0.0);
  130.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  131.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  132.    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  133.    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
  134.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  135.    glutSolidSphere(1.0, 16, 16);
  136.    glPopMatrix();
  137.  
  138.    glPushMatrix();
  139.    glTranslatef (3.75, 0.0, 0.0);
  140.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  141.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  142.    glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  143.    glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  144.    glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
  145.    glutSolidSphere(1.0, 16, 16);
  146.    glPopMatrix();
  147.  
  148.    glPushMatrix();
  149.    glTranslatef (-3.75, -3.0, 0.0);
  150.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  151.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  152.    glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  153.    glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  154.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  155.    glutSolidSphere(1.0, 16, 16);
  156.    glPopMatrix();
  157.  
  158.    glPushMatrix();
  159.    glTranslatef (-1.25, -3.0, 0.0);
  160.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  161.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  162.    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  163.    glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
  164.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  165.    glutSolidSphere(1.0, 16, 16);
  166.    glPopMatrix();
  167.  
  168.    glPushMatrix();
  169.    glTranslatef (1.25, -3.0, 0.0);
  170.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  171.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  172.    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  173.    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
  174.    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  175.    glutSolidSphere(1.0, 16, 16);
  176.    glPopMatrix();
  177.  
  178.    glPushMatrix();
  179.    glTranslatef (3.75, -3.0, 0.0);
  180.    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  181.    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  182.    glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  183.    glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  184.    glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
  185.    glutSolidSphere(1.0, 16, 16);
  186.    glPopMatrix();
  187.  
  188.    glFlush();
  189. }
  190.  
  191. void reshape(int w, int h)
  192. {
  193.    glViewport(0, 0, w, h);
  194.    glMatrixMode(GL_PROJECTION);
  195.    glLoadIdentity();
  196.    if (w <= (h * 2))
  197.       glOrtho (-6.0, 6.0, -3.0*((GLfloat)h*2)/(GLfloat)w,
  198.          3.0*((GLfloat)h*2)/(GLfloat)w, -10.0, 10.0);
  199.    else
  200.       glOrtho (-6.0*(GLfloat)w/((GLfloat)h*2),
  201.          6.0*(GLfloat)w/((GLfloat)h*2), -3.0, 3.0, -10.0, 10.0);
  202.    glMatrixMode(GL_MODELVIEW);
  203.    glLoadIdentity();
  204. }
  205.  
  206. void keyboard(unsigned char key, int x, int y)
  207. {
  208.    switch (key) {
  209.       case 27:
  210.          exit(0);
  211.          break;
  212.    }
  213. }
  214.  
  215. int main(int argc, char** argv)
  216. {
  217.    glutInit(&argc, argv);
  218.    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  219.    glutInitWindowSize (600, 450);
  220.    glutCreateWindow(argv[0]);
  221.    init();
  222.    glutReshapeFunc(reshape);
  223.    glutDisplayFunc(display);
  224.    glutKeyboardFunc (keyboard);
  225.    glutMainLoop();
  226.    return 0;
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement