Opengl學習筆記1 -- 做一個透視立方體
截圖如下:
第一個難度較低,第二個任務則包含更多的程式碼學習,所以在這裡將hw2-2中的相關程式碼解釋一遍:
glClearColor(1.0,1.0,1.0,0.0)
;這四個引數分別的 RGBA,範圍是0.0f到1.0f,這個方法設定了用於清除的顏色是什麼,而glClear(GL_COLOR_BUFFER_BIT)
函式則執行了清除。gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);
這個函式設定攝像機的位置,角度等屬性。引數中 前3個為 攝像機座標系的原點,中間3個是 攝像機的視點,而最後的則是 攝像機的向上向量(就是規定攝像機哪裡是向上的,也就是攝像機角度glMatrixMode()
函式的引數,這個函式其實就是對接下來要做什麼進行一下宣告,也就是在要做下一步之前告訴計算機我要對“什麼”進行操作了,這個“什麼”在glMatrixMode的“()”裡的選項(引數)有3種模式: GL_PROJECTION 投影, GL_MODELVIEW 模型檢視, GL_TEXTURE 紋理.這個函式表示模型在各軸上是如果進行縮放的。舉個例子:
glScalef (1.0, 2.0, 1.0);//表示y座標值擴大兩倍,這樣原本方的物體就變成長的了。
注意是 針對模型的。glRotatef(45.0, 0.0, 1.0, 1.0);
旋轉變換同上理,第一個引數是旋轉角度,後面三個引數則代表一個向量glFrustum(... )
是opengl類庫中的函式,它是將當前矩陣與一個透視矩陣相乘,把當前矩陣轉變成透視矩陣,在使用它之前,通常會先呼叫glMatrixMode(GL_PROJECTION).
即是該函式構造了一個視景體用來將模型進行投影,來裁剪模型,決定模型哪些在視景體裡面,哪些在視景體的外面,在視景體之外的就不可見。glLoadIdentity()
,恢復初始座標系glutSolidCube (1.0);
建立單位立方體,1表示一個單位的glutWireCube (1.0);
建立立方體邊線,1表示一個單位的glFlush()
就是強制重新整理glutDisplayFunc (displayFcn);
glutReshapeFunc()
當改變視窗大小的時候的回撥函式
總結:
在瞭解了程式碼之後發現繪圖的過程其實和 canvas 一類的還是有相似之處的,而且可以明顯感覺到並不是面向物件而是面向過程的。