导读:
2//注意这个矩阵是正交的,没有正交就用,好像有放缩作用
GLfloat Tmat1[16] = { NUM, NUM, 0.0, 0.0,
-NUM, NUM, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0};
GLfloat Tmat2[16] = { 1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
1.0, 0.0, 0.0, 1.0,
};
7void setupRC(void) 8{ 9 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);10 glShadeModel(GL_FLAT);11}
12
13void RenderScene(void)14{15 printf("RenderScene/n"); 16glClear(GL_COLOR_BUFFER_BIT);17glColor3f(0.0f, 1.0f, 1.0f);18 glMatrixMode(GL_MODELVIEW);19 glLoadIdentity();20 gluLookAt(0.0, 0.0, 5.0, // view point
21 0.0, 0.0, 0.0, // focus point
22 0.0, 1.0, 0.0); // up vector
23
24 glutSolidCube(0.5); // 原点的参考位置
25 glMultMatrixf(Tmatr1); //这个矩阵的动作和下面的两个变换是一样的。
glMultMatrixf(Tmatr2);26// glRotatef(45.0, 0.0, 0.0, 1.0);27// glTranslatef(3.0, 0.0, 0.0);
28 glutSolidCube(1.0);29
30 glutSwapBuffers();31}
32
33void ChangeSize(int w, int h)34{35 printf("ChangeSize/n"); // 从这里看出,是先调用ChangeSize()的36 GLfloat nRange = 10.0f
37
38 if(h == 0)39 h = 1
40 GLfloat fRatio = (GLfloat)w / (GLfloat)h;41
42 glMatrixMode(GL_PROJECTION);43 glLoadIdentity();44
45 if(w <= h)46 glOrtho(-nRange, nRange, -nRange / fRatio, nRange / fRatio, 1.0, nRange);47 else
48 glOrtho(-nRange * fRatio, nRange * fRatio, -nRange, nRange, 1.0, nRange);49
50 glViewport(0, 0, w ,h);51
52 glMatrixMode(GL_MODELVIEW);53 glLoadIdentity();54}
55
56int main(int argc, char* argv[])57{58 glutInit(&argc, argv);59 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);60 glutInitWindowSize(800, 600);61 glutCreateWindow("example");62
63 glutReshapeFunc(ChangeSize);64 glutDisplayFunc(RenderScene);65
66 setupRC();67
68 glutMainLoop();69
70 std::cout << "Hello world!" << std::endl;71 return 0
本文转自
http://blog.sina.com.cn/s/blog_4a1aa6d801009fi8.html
2//注意这个矩阵是正交的,没有正交就用,好像有放缩作用
GLfloat Tmat1[16] = { NUM, NUM, 0.0, 0.0,
-NUM, NUM, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0};
GLfloat Tmat2[16] = { 1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
1.0, 0.0, 0.0, 1.0,
};
7void setupRC(void) 8{ 9 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);10 glShadeModel(GL_FLAT);11}
12
13void RenderScene(void)14{15 printf("RenderScene/n"); 16glClear(GL_COLOR_BUFFER_BIT);17glColor3f(0.0f, 1.0f, 1.0f);18 glMatrixMode(GL_MODELVIEW);19 glLoadIdentity();20 gluLookAt(0.0, 0.0, 5.0, // view point
21 0.0, 0.0, 0.0, // focus point
22 0.0, 1.0, 0.0); // up vector
23
24 glutSolidCube(0.5); // 原点的参考位置
25 glMultMatrixf(Tmatr1); //这个矩阵的动作和下面的两个变换是一样的。
glMultMatrixf(Tmatr2);26// glRotatef(45.0, 0.0, 0.0, 1.0);27// glTranslatef(3.0, 0.0, 0.0);
28 glutSolidCube(1.0);29
30 glutSwapBuffers();31}
32
33void ChangeSize(int w, int h)34{35 printf("ChangeSize/n"); // 从这里看出,是先调用ChangeSize()的36 GLfloat nRange = 10.0f
37
38 if(h == 0)39 h = 1
40 GLfloat fRatio = (GLfloat)w / (GLfloat)h;41
42 glMatrixMode(GL_PROJECTION);43 glLoadIdentity();44
45 if(w <= h)46 glOrtho(-nRange, nRange, -nRange / fRatio, nRange / fRatio, 1.0, nRange);47 else
48 glOrtho(-nRange * fRatio, nRange * fRatio, -nRange, nRange, 1.0, nRange);49
50 glViewport(0, 0, w ,h);51
52 glMatrixMode(GL_MODELVIEW);53 glLoadIdentity();54}
55
56int main(int argc, char* argv[])57{58 glutInit(&argc, argv);59 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);60 glutInitWindowSize(800, 600);61 glutCreateWindow("example");62
63 glutReshapeFunc(ChangeSize);64 glutDisplayFunc(RenderScene);65
66 setupRC();67
68 glutMainLoop();69
70 std::cout << "Hello world!" << std::endl;71 return 0
本文转自
http://blog.sina.com.cn/s/blog_4a1aa6d801009fi8.html