home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / openglso.zip / Draw.c < prev    next >
C/C++ Source or Header  |  2000-02-16  |  4KB  |  140 lines

  1. /*========================================================================= 
  2.  *                                 CS 488/688                                
  3.  *                          Introduction to Graphics                        
  4.  *                                                                         
  5.  *                           Assignment 1: OpenGL                         
  6.  *                                                                       
  7.  *=========================================================================*/
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <GL/gl.h> 
  11.  
  12. #include "gr.h"
  13. #include "util.h"
  14. #include "Draw.h"
  15.  
  16. /* Colour Definitions */
  17. GrColour black    = {0.0, 0.0, 0.0};
  18. GrColour red      = {1.0, 0.0, 0.0};
  19. GrColour green    = {0.0, 1.0, 0.0};
  20. GrColour yellow   = {1.0, 1.0, 0.0};
  21. GrColour blue     = {0.0, 0.0, 1.0};
  22. GrColour magenta  = {1.0, 0.0, 1.0};
  23. GrColour cyan     = {0.0, 1.0, 1.0};
  24. GrColour white    = {1.0, 1.0, 1.0};
  25. GrColour grey     = {0.5, 0.5, 0.5};
  26.  
  27. GrPolygon unitCube[6];
  28.   
  29. /*
  30.  * MakeUnitCube
  31.  */
  32. void MakeUnitCube(void)
  33. {
  34.   int i;
  35.  
  36.   for (i=0; i<6; i++) {
  37.     unitCube[i].nr_vertices = 4;
  38.     unitCube[i].vertices = (GrPoint3D *) malloc (4 * sizeof(GrPoint3D));
  39.   }
  40.  
  41.   /* Bottom Plane (4, 3, 2, 1) */
  42.   unitCube[0].vertices[0] = mkPoint3D(1.0, -1.0, -1.0);
  43.   unitCube[0].vertices[1] = mkPoint3D(1.0, -1.0, 1.0);
  44.   unitCube[0].vertices[2] = mkPoint3D(-1.0, -1.0, 1.0);
  45.   unitCube[0].vertices[3] = mkPoint3D(-1.0, -1.0, -1.0);
  46.  
  47.   /* Top Plane (6, 7, 8, 5) */
  48.   unitCube[1].vertices[0] = mkPoint3D(-1.0, 1.0, -1.0);
  49.   unitCube[1].vertices[1] = mkPoint3D(-1.0, 1.0, 1.0);
  50.   unitCube[1].vertices[2] = mkPoint3D(1.0, 1.0, 1.0);
  51.   unitCube[1].vertices[3] = mkPoint3D(1.0, 1.0, -1.0);
  52.  
  53.   /* Front Plane (2, 3, 8, 7) */
  54.   unitCube[2].vertices[0] = mkPoint3D(-1.0, -1.0, 1.0);
  55.   unitCube[2].vertices[1] = mkPoint3D(1.0, -1.0, 1.0);
  56.   unitCube[2].vertices[2] = mkPoint3D(1.0, 1.0, 1.0);
  57.   unitCube[2].vertices[3] = mkPoint3D(-1.0, 1.0, 1.0);
  58.  
  59.   /* Back Plane (6, 5, 4, 1) */
  60.   unitCube[3].vertices[0] = mkPoint3D(-1.0, 1.0, -1.0);
  61.   unitCube[3].vertices[1] = mkPoint3D(1.0, 1.0, -1.0);
  62.   unitCube[3].vertices[2] = mkPoint3D(1.0, -1.0, -1.0);
  63.   unitCube[3].vertices[3] = mkPoint3D(-1.0, -1.0, -1.0);
  64.  
  65.   /* Left Plane (1, 2, 7, 6) */
  66.   unitCube[4].vertices[0] = mkPoint3D(-1.0, -1.0, -1.0);
  67.   unitCube[4].vertices[1] = mkPoint3D(-1.0, -1.0, 1.0);
  68.   unitCube[4].vertices[2] = mkPoint3D(-1.0, 1.0, 1.0);
  69.   unitCube[4].vertices[3] = mkPoint3D(-1.0, 1.0, -1.0);
  70.  
  71.   /* Right Plane (5, 8, 3, 4) */
  72.   unitCube[5].vertices[0] = mkPoint3D(1.0, 1.0, -1.0);
  73.   unitCube[5].vertices[1] = mkPoint3D(1.0, 1.0, 1.0);
  74.   unitCube[5].vertices[2] = mkPoint3D(1.0, -1.0, 1.0);
  75.   unitCube[5].vertices[3] = mkPoint3D(1.0, -1.0, -1.0);
  76. }
  77.  
  78.  
  79. /*
  80.  * DrawPolygon
  81.  */
  82. void DrawPolygon(GrPolygon poly, GrVector3D normal)
  83. {
  84.   glBegin(GL_POLYGON);
  85.   {
  86.     glNormal3d(normal.x, normal.y, normal.z);
  87.     glVertex3d(poly.vertices[0].x, poly.vertices[0].y, poly.vertices[0].z);
  88.     glNormal3d(normal.x, normal.y, normal.z);
  89.     glVertex3d(poly.vertices[1].x, poly.vertices[1].y, poly.vertices[1].z);
  90.     glNormal3d(normal.x, normal.y, normal.z);
  91.     glVertex3d(poly.vertices[2].x, poly.vertices[2].y, poly.vertices[2].z);
  92.     glNormal3d(normal.x, normal.y, normal.z);
  93.     glVertex3d(poly.vertices[3].x, poly.vertices[3].y, poly.vertices[3].z);
  94.   }
  95.   glEnd();
  96. }
  97.  
  98.  
  99. /*
  100.  * DrawUnitCube
  101.  */
  102. void DrawUnitCube(void)
  103. {
  104.   int i;
  105.   GrVector3D normal;
  106.  
  107.     /* Hide the back surface. */
  108.     glCullFace(GL_BACK); 
  109.     glEnable(GL_CULL_FACE);
  110.  
  111.     /* Draw a red cube */
  112.     glColor3f(1, 0, 0);
  113.  
  114.     /* Bottom Plane */
  115.     normal = mkVector3D(0.0, -1.0, 0.0);
  116.     DrawPolygon(unitCube[0], normal); 
  117.  
  118.     /* Top Plane */
  119.     normal = mkVector3D(0.0, 1.0, 0.0);
  120.     DrawPolygon(unitCube[1], normal);
  121.  
  122.     /* Front Plane */
  123.     normal = mkVector3D(0.0, 0.0, 1.0);
  124.     DrawPolygon(unitCube[2], normal); 
  125.  
  126.     /* Back Plane */
  127.     normal = mkVector3D(0.0, 0.0, -1.0);
  128.     DrawPolygon(unitCube[3], normal);  
  129.  
  130.     /* Left Plane */
  131.     normal = mkVector3D(-1.0, 0.0, 0.0);
  132.     DrawPolygon(unitCube[4], normal); 
  133.  
  134.     /* Right Plane */
  135.     normal = mkVector3D(1.0, 0.0, 0.0);
  136.     DrawPolygon(unitCube[5], normal);  
  137. }
  138.  
  139.  
  140.