6.5編程實例-立方體透視投影


clip_image002

  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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM