1 #include <GL/glut.h> 2 3 GLint winWidth = 600, winHeight = 600; //設置初始化窗口大小 4 5 /* 觀察坐標系參數設置*/ 6 7 GLfloat x0 = 0.0, y0= 0.0, z0 =5.0; // 設置觀察坐標系原點 8 9 GLfloat xref = 0.0, yref =0.0, zref = 0.0; //設置觀察坐標系參考點(視點) 10 11 GLfloat Vx = 0.0, Vy = 1.0, Vz = 0.0; // 設置觀察坐標系向上向量(y軸) 12 13 /*觀察體(視見體)參數設置 */ 14 15 GLfloat xwMin = -1.0, ywMin = -1.0, xwMax = 1.0, ywMax = 1.0;//設置裁剪窗口坐標范圍 16 17 GLfloat dnear = 1.5, dfar = 20.0;//設置遠、近裁剪面深度范圍 18 19 void init (void) 20 21 { 22 23 glClearColor(1.0,1.0,1.0,0.0); 24 25 //glShadeModel (GL_FLAT);//xz 26 27 /*①觀察變換*/ 28 29 /*視點變換*/ 30 31 gluLookAt (x0, y0, z0, xref, yref, zref, Vx, Vy, Vz); //指定三維觀察參數 32 33 /*模型變換*/ 34 35 glMatrixMode (GL_MODELVIEW); 36 37 glScalef (2.0, 2.0, 2.0); //比例放縮變換 38 39 glRotatef(45.0, 0.0, 1.0, 1.0);//旋轉變換 40 41 /*②投影變換*/ 42 43 glMatrixMode (GL_PROJECTION); 44 45 glLoadIdentity (); 46 47 glFrustum (xwMin, xwMax, ywMin, ywMax, dnear, dfar);//透視投影,設置透視視景體 48 49 } 50 51 void displayFcn (void) 52 53 { 54 55 glClear (GL_COLOR_BUFFER_BIT); 56 57 glColor3f (0.0, 1.0, 0.0); // 設置前景色為綠色 58 59 glutSolidCube (1.0);//繪制單位立方體實體 60 61 glColor3f (0.0, 0.0, 0.0); // 設置前景色為黑色 62 63 glLineWidth (2.0); //設置線寬 64 65 glutWireCube (1.0);//繪制單位立方體線框 66 67 glFlush (); 68 69 } 70 71 void reshapeFcn (GLint newWidth, GLint newHeight) 72 73 { 74 75 /*③視口變換 */ 76 77 glViewport (0, 0, newWidth, newHeight);//定義視口大小 78 79 winWidth = newWidth; 80 81 winHeight = newHeight; 82 83 } 84 85 void main (int argc, char** argv) 86 87 { 88 89 glutInit (&argc, argv); 90 91 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 92 93 glutInitWindowPosition (100, 100); 94 95 glutInitWindowSize (winWidth, winHeight); 96 97 glutCreateWindow ("單位立方體的透視投影"); 98 99 init (); 100 101 glutDisplayFunc (displayFcn); 102 103 glutReshapeFunc (reshapeFcn); 104 105 glutMainLoop (); 106 107 }
附上本實驗的VC++工程代碼(VC++2008)