本項目實現了用OpenGL繪制一個簡單場景,包括正方體、球體和網格,實現了物體的旋轉、縮放、平移和燈光效果。附有項目完整代碼。有具體凝視。適合剛開始學習的人熟悉opengl使用。
開發情況
開發環境VS2012+OpenGL
開發平台 Intel core i5,Intel HD Graphics Family
本項目實現了繪制一個場景(包含立方體、球體、網格),對各物體實現平移、旋轉、縮放功能,加入了光源並簡單設置了物體材質。
本項目演示樣例代碼下載(里面有具體凝視)
感謝nehe的框架!
場景介紹
初始場景。在(-3.0f,-2.0f,-10.0f)處繪制了一個正方體,在(3.0f,-2.0f,-10.0f)處繪制了一個半徑為2的球,在y = -3.0f平面繪制了10*10的網格線。
操作介紹
旋轉操作:
GLfloat rquad;//旋轉角度
···
glRotatef(rquad,0.0f,1.0f,0.0f);//旋轉變換。繞y軸
rquad-=0.1f;// 降低四邊形的旋轉變量
旋轉后例如以下圖
平移操作
glTranslatef(0.0f,-rquad/100,0.0f);
平移前后如圖所看到的
縮放操作
glScalef(-rquad/100,-rquad/100,-rquad/100);
縮放后例如以下圖
燈光介紹
OpenGL的光照模型是用來模擬現實生活中的光照的。它依據頂點的法線向量和光源的位置決定頂點的明暗程度。依據頂點的材質和光源中三原色的成分來決定物體將表現出如何的顏色。
調用glLightfv(GL_LIGHT0,GL_AMBIENT,@ambientLight);來設置場景的環境光。
本例中光照設置例如以下,前三位為RGB顏色,第四位為alpha
GLfloatlight_ambient[] = { 0.5, 0.5, 0.5, 1.0 };//環境光
GLfloatlight_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };//漫射光
GLfloatlight_specular[] = { 0.0, 1.0, 0.0, 1.0 };//鏡面光
具體代碼見代碼附件。加入光源后例如以下圖
對OpenGL的理解
OpenGL變換實際上是通過矩陣乘法來實現。不管是移動、旋轉還是縮放大小,都是通過在當前矩陣的基礎上乘以一個新的矩陣來達到目的。
可是從用戶的角度。更直觀的感受是操作矩陣。
首先通過glMatrixMode()方法設置投影矩陣和模型觀察矩陣,而后面的繪制過程,就是在模型矩陣中產生不同的點,形成各種圖形,然后通過選擇的投影矩陣投影到屏幕上,被我們觀察到。所以對圖形的各種操作也能夠看成是對坐標系的變換。
以平移操作為例,使用glSolidCube(GLfloat size)方法畫一個正方體,這個正方體是默認畫在當前坐標系中央的,所以要移動正方體,僅僅要移動坐標系就能夠。glTranslatef(0.0f,-rquad/100,0.0f);就是不斷向y軸正方向移動坐標系。不斷繪制正方體,就能有平移的效果。