一些OpenGL的筆記

來源:互聯網
上載者:User

一些OpenGL的筆記

gluPerspective

gluPerspective的用法:

void gluPerspective(  GLdouble fovy, //角度  GLdouble aspect,//視景體的寬高比  GLdouble zNear,//沿z軸方向的兩裁面之間的距離的近處  GLdouble zFar //沿z軸方向的兩裁面之間的距離的遠處  );

記住,預設情況(也就是使用以下的語句)

glMatrixMode( GL_PROJECTION );glLoadIdentity( );

下,視口是朝向Z軸的負半軸的,我們在使用gluPerspective函數的時候,zNear和zFar是相對於我們的視口定義的。所以繪製圖形的時候,決不能認為我們圖形的z軸座標是正的才能顯示,恰恰相反,z軸座標是負的才能顯示。

注意:gluPerspective()函數中zNear一定要大於0,一旦等於0或小於0,則無法顯示所有的三維物體。

當然了zFar要大於zNear,要不然也無法顯示。

GlutPostRedisplay以及畫面

注意:glutPostRedisplay()函數不能在渲染線程以外被調用,寫在渲染線程之外的話調用將無效。

為什麼我的畫面在動的時候,移動視窗會出現一些延遲(俗稱“有些卡”)?

因為遊戲的繪製基本上在一個線程內進行,視窗化的程式FPS一般是60,取決於你設定的重新整理率。這就意味著你在移動視窗的時候,系統同時要保證1秒內畫面重新整理60次,也就是說,1/60秒內才有一次響應你移動視窗的操作,我想一般的視窗不會這麼頻繁地重新整理吧。所以呢,移動視窗會出現一些延遲,這是正常的。有的時候一些大型的遊戲在進行密集GPU操作的時候,不也出現了移動視窗無法響應或者響應很慢的情況嗎?

裁剪

glEnable( GL_DEPTH_TEST );// 使用深度測試glFrontFace( GL_CW ); // 順時針的繪製為正面glEnable( GL_CULL_FACE ); // 剔除不是正面的面

如果讓順時針繪製的圖形位正面,那麼我們一旦畫出了逆時針的圖形,那麼將不會顯示,因為不是正面的面已經被剔除掉了。

顯示列表

聲明顯示列表與渲染顯示列表要倒置,否則無法渲染後聲明的顯示列表。例如:

void Init( void ){    glNewList( list1, GL_COMPILE );    …    glEndList( );    glNewList( list2, GL_COMPILE );    …    glEndList( );}void Render( void ){    /* 錯誤:無法顯示list2。    glCallList( list1 );    glCallList( list2 );    */        glCallList( list2 );    glCallList( list1 );}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.