simple.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
- /* Copyright (c) Mark J. Kilgard, 1996. */
- /* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
- /* This program is a response to a question posed by Gil Colgate
- <gcolgate@sirius.com> about how lengthy a program is required using
- OpenGL compared to using Direct3D immediate mode to "draw a
- triangle at screen coordinates 0,0, to 200,200 to 20,200, and I
- want it to be blue at the top vertex, red at the left vertex, and
- green at the right vertex". I'm not sure how long the Direct3D
- program is; Gil has used Direct3D and his guess is "about 3000
- lines of code". */
- /* X compile line: cc -o simple simple.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */
- #include <GL/glut.h>
- void
- reshape(int w, int h)
- {
- /* Because Gil specified "screen coordinates" (presumably with an
- upper-left origin), this short bit of code sets up the coordinate
- system to correspond to actual window coodrinates. This code
- wouldn't be required if you chose a (more typical in 3D) abstract
- coordinate system. */
- glViewport(0, 0, w, h); /* Establish viewing area to cover entire window. */
- glMatrixMode(GL_PROJECTION); /* Start modifying the projection matrix. */
- glLoadIdentity(); /* Reset project matrix. */
- glOrtho(0, w, 0, h, -1, 1); /* Map abstract coords directly to window coords. */
- glScalef(1, -1, 1); /* Invert Y axis so increasing Y goes down. */
- glTranslatef(0, -h, 0); /* Shift origin up to upper-left corner. */
- }
- void
- display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_TRIANGLES);
- glColor3f(0.0, 0.0, 1.0); /* blue */
- glVertex2i(0, 0);
- glColor3f(0.0, 1.0, 0.0); /* green */
- glVertex2i(200, 200);
- glColor3f(1.0, 0.0, 0.0); /* red */
- glVertex2i(20, 200);
- glEnd();
- glFlush(); /* Single buffered, so needs a flush. */
- }
- int
- main(int argc, char **argv)
- {
- glutInit(&argc, argv);
- glutCreateWindow("single triangle");
- glutDisplayFunc(display);
- glutReshapeFunc(reshape);
- glutMainLoop();
- return 0; /* ANSI C requires main to return int. */
- }