大學的時候有個選修課,要用OpenGl,很初級的內容,同樣入門的學弟學妹適用
推薦個學習的資料NeHe的OpenGl教程,很完整而且有示例,講的很明白。比某些破書好。
可以配合那本所謂的“紅寶書”看看,中國人寫的書就不要看了,我借過好幾本內容都有些錯誤。
入門足夠了
英文:http://nehe.gamedev.net/
中文:http://www.yakergong.net/nehe/
開始正題:
glTranslatef(x,y,z);平移物體
glRotatef(角度,x,y,z);圍繞制定矢量旋轉
glScalef(x,y,z);縮放物體1.0為原始大小
glPushMatrix();//儲存當前視圖矩陣
glPopMatrix();//彈出上次保存的位置
*gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz);前三個指定眼睛的位置,中間三個指定中心點位置也就是視線看向的位置通常為0,0,0,最後三個指定哪個方向是上方(大約用這個控制攝像機位置吧 如果我錯了 求正確答案 我也是初學者 這個樣理論上應該沒問題 不過實際上攝像機是這麼控制的嗎?(最近了解到這個函數是封裝了gltranslatef 和glrotatef兩個函數而已 不推薦使用 不是gl標准庫中的函數)
例子: gluLookAt(-2.0f,5.0f,10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
glPushMatrix();
glTranslatef(0.0f,0.0f,3.0f);
glBegin(GL_QUADS); // 繪制正方形
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上
glVertex3f( 1.0f,-1.0f, 0.0f); // 左下
glVertex3f(-1.0f,-1.0f, 0.0f); // 右下
glEnd();
glColor3f(1.0f,0.0f,0.0f);
glPopMatrix();
glTranslatef(0.0f,0.0f,-3.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上
glVertex3f( 1.0f,-1.0f, 0.0f); // 左下
glVertex3f(-1.0f,-1.0f, 0.0f); // 右下
glEnd();
相當於
gluLookAt(-2.0f,5.0f,10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
glTranslatef(0.0f,0.0f,3.0f);
glBegin(GL_QUADS); // 繪制正方形
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上
glVertex3f( 1.0f,-1.0f, 0.0f); // 左下
glVertex3f(-1.0f,-1.0f, 0.0f); // 右下
glEnd();
glColor3f(1.0f,0.0f,0.0f);
glLoadIdentity();
gluLookAt(-2.0f,5.0f,10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
glTranslatef(0.0f,0.0f,-3.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上
glVertex3f( 1.0f,-1.0f, 0.0f); // 左下
glVertex3f(-1.0f,-1.0f, 0.0f); // 右下
glEnd();
引用一段別出的教程:
當您調用glLoadIdentity()之後,您實際上將當前點移到了屏幕中心,X坐標軸從左至右,Y坐標軸從下至上,Z坐標軸從裡至外。OpenGL屏幕中心的坐標值是X和Y軸上的0.0f點。中心左面的坐標值是負值,右面是正值。移向屏幕頂端是正值,移向屏幕底端是負值。移入屏幕深處是負值,移出屏幕則是正值。
glTranslatef(x, y, z)沿著 X, Y 和 Z 軸移動。根據前面的次序,下面的代碼沿著X軸左移1.5個單位,Y軸不動(0.0f),最後移入屏幕6.0f個單位。
以下是附贈的手繪版本的opengl坐標系示意圖,注意Z軸是垂直顯示器向外的哦