OpenGL中glVertex2f函數與gluOrtho2D的參數的對應關係,以及常見函數的對應座標系

來源:互聯網
上載者:User

兩個函數的函數原型如下:

glVertex(GLfloat x, GLfloat y);

gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);

簡單的說前者的兩個參數所代表的座標點,必須落在後者參數所形成的座標系內,不然該點就在viewport之外。

舉個例子:

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(9);
glBegin(GL_POINTS);
glVertex2f(67.0,67.0);//6行
glEnd();
glFlush();
}
void init()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-70.0,70.0,-70.0,70.0);//第十四行
}

如果第8行改為glVertex2f(80.0,80.0)這時就看不到這個點了。

在沒有設定gluOrtho2D函數的情況下(2維的情況),預設為視窗的中心是(0,0),而到矩形的邊的最遠距離為0;參數大於0則該點又看不到了。 

     同時,在這裡也憑平時的經驗總結一下opengl中的一些函數的參照座標

     glViewport函數:它的原點(0,0)在所生產的視窗的坐下角。

     gluOrtho,glBegin,glEnd函數:它們的原點是glViewport在glutCreatWindow函數所產生的視窗的上的投影(即視口)的中心。比如說畫一個點glVertex2i(0,0),在沒設定gluOrtho函數(即預設時),這個點在視窗的正中間。

     glutMouseFunc(mymouse):此時滑鼠指標的原點(0,0)在視口的最左上方。


    參考座標這麼多,畫圖時我們腦海中想要畫的圖到底該怎麼轉換到視窗裡去呢?個人認為,先假設沒有設定視口(viewport),即glCreateWindow函數產生的那個視窗整個就是視口(viewport)。然後視窗的中心即是gluOrtho函數的原點,用gluOrtho函數裁剪視窗,然後就用glBegin一系列的函數畫圖(在所裁剪的視窗上),畫完後圖形已經固定,再考慮用glViewport函數將圖形在glCreatWindow函數所產生的視窗上進行投影。假設剛才的裁剪視窗是一個正方形,你畫的圖形也是個正方形而視口(viewport)也是個正方形,那麼最後在視窗中產生的圖形也是個正方形如果畫的是正方形,裁剪視窗也是正方形,但視口(viewport)不是一個正方形那最後得到的也不是一正方形,這就是為什麼在沒有設定glViewport函數(即預設整個視窗為視口)時,我們用滑鼠將視窗拖大、縮小時,裡面之前畫的正方形會跟著視窗的變化一起變化,以至於會成為一個矩形的原因。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.