5.5 编程实例-红蓝三角形

注:教材中原程序中第55行glLoadIdentity()位置不对,现在更正至第31行。图5.17同时更正如上图。


 1 #include <GL/glut.h>
 2 
 3 typedef GLfloat point2d[2]; // a point data type
 4 
 5 void triangle( point2d a, point2d b, point2d c) // display a triangle
 6 
 7 {
 8 
 9     glBegin(GL_TRIANGLES);
10 
11     glVertex2fv(a);
12 
13     glVertex2fv(b);
14 
15     glVertex2fv(c);
16 
17     glEnd();
18 
19 }
20 
21 void display(void)
22 
23 {
24 
25     point2d v[3] = {{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}}; //initial triangle vertices
26 
27     glClear(GL_COLOR_BUFFER_BIT); // Clear display window
28 
29     glColor3f(0.0,0.0,1.0); // Set fill color to blue
30 
31     glLoadIdentity();//应该放在此处,保证每次显示正确
32 
33     glViewport(0, 0, 300, 400); // Set left viewport
34 
35     triangle(v[0], v[1], v[2]);
36 
37     glColor3f(1.0,0.0,0.0); // Set fill color to red
38 
39     glViewport(300, 0, 300, 400); // Set right viewport
40 
41     glRotatef(90.0, 0.0, 0.0, 1.0); // Rotate about z axis
42 
43     triangle(v[0], v[1], v[2]); // Display blue triangle
44 
45     glFlush();
46 
47 }
48 
49 void init()
50 
51 {
52 
53     glMatrixMode(GL_PROJECTION);
54 
55     //glLoadIdentity();//如果放在此处,会导致第一次显示正确,再次刷新时图形旋转
56 
57     gluOrtho2D(-2.0, 2.0, -2.0, 2.0);
58 
59     glMatrixMode(GL_MODELVIEW);
60 
61     glClearColor(1.0, 1.0, 1.0,1.0);
62 
63 }
64 
65 void main(int argc, char **argv)
66 
67 {
68 
69     glutInit(&argc, argv);
70 
71     glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
72 
73     glutInitWindowSize(600, 400);
74 
75     glutCreateWindow("Triangle");
76 
77     glutDisplayFunc(display);
78 
79     init();
80 
81     glutMainLoop();
82 
83 }

 

 

附上本实验的VC++工程代码(VC++2008)

posted on 2014-06-16 10:23  慢步前行  阅读(1468)  评论(0编辑  收藏  举报

导航