2013-06-24 102 views
0

我需要做在OpenGL平滑。 我發現這個代碼OpenGL的平滑怎麼樣?

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glShadeModel(GL_SMOOTH); 

glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST); 
glEnable(GL_POLYGON_SMOOTH); 

glDisable(GL_DEPTH_TEST); 
glEnable(GL_ALPHA_TEST); 

平滑是在這種情況下工作,但我並不需要透明度。我認爲這2行是負責透明度:

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

但是,如果我刪除這些字符串 - 平滑不起作用。我需要離開平滑嗎?我只需要在我的項目平滑,不需要交融......

+0

你可能不希望使用平滑。它從來沒有提供好的結果,它的支持是可選的。只需使用全屏多重採樣抗鋸齒(FSAA,MSAA)。更容易使用,更好的結果。 – datenwolf

回答

0

好,使用透明度平滑作品,邊緣也不彩色或沒有,但他們是......嗯......透明。看看這些圖片:

smoothed lineunsmoothed line

正如你所看到的,行權不平滑,它的像素要麼是完全不透明或完全透明的。左邊的線是平滑的,它的外部像素是透明的。

你可以看下進而迫使抗鋸齒在你的程序中,AA是,僅僅管理邊緣平滑硬件/驅動程序功能(並根據AA的類型,其他的事情)。請記住,這不是OpenGL的功能,而是硬件,驅動程序和操作系統。一般來說,當你創建你的OpenGL-Context時,你會請求類似AA的東西。