程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> OpenGl入門——視口及物體移動函數

OpenGl入門——視口及物體移動函數

編輯:C++入門知識

大學的時候有個選修課,要用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軸是垂直顯示器向外的哦

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved