simple.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1996. */
  2. /* This program is freely distributable without licensing fees 
  3.    and is provided without guarantee or warrantee expressed or 
  4.    implied. This program is -not- in the public domain. */
  5. /* This program is a response to a question posed by Gil Colgate
  6.    <gcolgate@sirius.com> about how lengthy a program is required using
  7.    OpenGL compared to using  Direct3D immediate mode to "draw a
  8.    triangle at screen coordinates 0,0, to 200,200 to 20,200, and I
  9.    want it to be blue at the top vertex, red at the left vertex, and
  10.    green at the right vertex".  I'm not sure how long the Direct3D
  11.    program is; Gil has used Direct3D and his guess is "about 3000
  12.    lines of code". */
  13. /* X compile line: cc -o simple simple.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */
  14. #include <GL/glut.h>
  15. void
  16. reshape(int w, int h)
  17. {
  18.   /* Because Gil specified "screen coordinates" (presumably with an
  19.      upper-left origin), this short bit of code sets up the coordinate
  20.      system to correspond to actual window coodrinates.  This code
  21.      wouldn't be required if you chose a (more typical in 3D) abstract
  22.      coordinate system. */
  23.   glViewport(0, 0, w, h);       /* Establish viewing area to cover entire window. */
  24.   glMatrixMode(GL_PROJECTION);  /* Start modifying the projection matrix. */
  25.   glLoadIdentity();             /* Reset project matrix. */
  26.   glOrtho(0, w, 0, h, -1, 1);   /* Map abstract coords directly to window coords. */
  27.   glScalef(1, -1, 1);           /* Invert Y axis so increasing Y goes down. */
  28.   glTranslatef(0, -h, 0);       /* Shift origin up to upper-left corner. */
  29. }
  30. void
  31. display(void)
  32. {
  33.   glClear(GL_COLOR_BUFFER_BIT);
  34.   glBegin(GL_TRIANGLES);
  35.     glColor3f(0.0, 0.0, 1.0);  /* blue */
  36.     glVertex2i(0, 0);
  37.     glColor3f(0.0, 1.0, 0.0);  /* green */
  38.     glVertex2i(200, 200);
  39.     glColor3f(1.0, 0.0, 0.0);  /* red */
  40.     glVertex2i(20, 200);
  41.   glEnd();
  42.   glFlush();  /* Single buffered, so needs a flush. */
  43. }
  44. int
  45. main(int argc, char **argv)
  46. {
  47.   glutInit(&argc, argv);
  48.   glutCreateWindow("single triangle");
  49.   glutDisplayFunc(display);
  50.   glutReshapeFunc(reshape);
  51.   glutMainLoop();
  52.   return 0;             /* ANSI C requires main to return int. */
  53. }