OpenGL中的多重採樣,OpenGL多重採樣

來源:互聯網
上載者:User

OpenGL中的多重採樣,OpenGL多重採樣
     OpenGL中的多重採樣
       消除鋸齒處理的最大優點之一就是它能夠使多邊形的邊緣更為平滑,使渲染效果顯得更為逼真和自然。點和直線的消除鋸齒處理是得到廣泛支援的,但遺憾的是,對多邊形的平滑處理並沒有在所有平台上都得到實現。並且,即使在可以使用GL_POLYGON_SMOOTH的時候,對整個情境進行消除鋸齒處理也沒有想象中的那麼方便。這是因為,消除鋸齒處理是基於混合操作的,這就需要從前到後對所有的圖元進行排序,這是十分麻煩的。
     在OpenGL中還有一個功能,稱為多重採樣(multisampling),可以用來解決消除鋸齒處理中的這個問題。支援多重採樣的OpenGL實現中,在已經包含了顏色、深度、模板值的框架緩衝區中還會添加一個額外的緩衝區,所有的圖元在每個像素上都進行多次採樣,其結果就儲存在這個新增的緩衝區中。每次當像素進行更新時,就會針對這些採樣值進行解析,以產生一個單獨的值。這個處理屬於是在“幕後發生的事情”,它會帶來額外的記憶體和處理器開銷,會對效能造成一定的影響。因此,有些OpenGL實現可能並不支援多渲染環境中的多重採樣處理。
     為了進行多重採樣,首先必須獲得一個支援多重採樣框架緩衝區的渲染環境,這在不同的平台中擷取方法可能各不相同。GLUT提供了一個位段(GLUT_MULTISAMPLE),允許請求這種框架緩衝區。例如,為了請求一個多重採樣、完全顏色、帶深度的雙緩衝框架緩衝區,可以調用:
     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE);
     然後,我們可以使用glEnable/glDisable組合來開啟或關閉多重採樣:          // 開啟多重採樣     glEnable(GL_MULTISAMPLE); 
     // 關閉多重採樣     glDisable(GL_MULTISAMPLE);
     關於多重採樣還需要特別注意的一個地方是當它被啟用時,點、直線和多邊形的平滑特性都將被忽略(如果開啟了的話)。這意味著在使用多重採樣時,就不能同時使用點、直線和多邊形的平滑處理了。但是在有些情況下,點和直線如果採用平滑處理可能會比使用多重採樣得到的效果更好。因此,當我們繪製點和直線時,可以關閉多重採樣,在繪製其它實心幾何圖形時再開啟多重採樣。代碼如下所示:
     // 關閉多重採樣     glDisable(GL_MULTISAMPLE);     // 開啟頂點的平滑處理     glEnable(GL_POINT_SMOOTH);          // 繪製一些平滑的點     // ... 
     // 關閉頂點的平滑處理     glDisable(GL_POINT_SMOOTH);     // 開啟多重採樣     glEnable(GL_MULTISAMPLE);
     注意,如果沒有多重採樣緩衝區,OpenGL就會把GL_MULTISAMPLE當做是被禁用的。     多重採樣緩衝區在預設情況下使用片段的RGB值,並不包括顏色的alpha成分。我們可以通過調用glEnable方法配合下面的參數來修改這個行為:
     GL_SAMPLE_ALPHA_TO_COVERAGE     使用alpha值     GL_SAMPLE_ALPHA_TO_ONE     把alpha值設為1,並使用它     GL_SAMPLE_COVERAGE     使用glSampleCoverage函數所設定的值
     當啟用了GL_SAMPLE_COVERAGE時,glSampleCoverage函數允許指定一個特定的值,它是與片斷覆蓋值進行位與(AND)操作的結果。
     void glSampleCoverage(GLclampf value, GLboolean invert);
     這種對多重採樣的最佳化並不是嚴格由OpenGL規範所規定的,其確切的結果可能因不同的OpenGL實現而異。
     OpenGL中的狀態排序     開啟或關閉不同的OpenGL特性將會修改驅動程式的內部狀態,這種狀態的改變可能會對渲染的效能造成影響。所以,對效能非常敏感的程式員常常會不辭辛苦地對所有的繪圖命令進行排序,使需要相同狀態的幾何圖形在一起進行繪製。這種狀態排序的手段是遊戲程式員非常常用的提高渲染速度的方法之一。
        未完待續...

     本文出自杜曉萌的部落格,請勿用於任何商業用途,轉載請保持完整性並標明出處:http://blog.csdn.net/haohan_meng

聯繫我們

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