openGL中的抗锯齿实现

图形绘制到屏幕时,光栅化图像通过离散的像素点来表示,因此所绘制的图元(比如直线)会产生锯齿,这种锯齿也称作走样。消除锯齿的技术称为反走样,也叫做抗锯齿,通过这种处理可在一定程度上消除锯齿的影响,增强显示效果。在OpenGL中,可通过函数glHint()来对图像质量和绘制速度之间的权衡作一些控制,其函数形式为:

 

   void glHint(GLenum target,GLenum hint);

 

  参数target说明控制什么行为:GL_POINT_SMOOTH_HINTGL_LINE_SMOOTH_HINTGL_POLYGON_SMOOTH_HINT分别指定点、线和多边形的采样质量;GL_FOG_HINT指出雾是按像素进行(GL_NICEST)还是按顶点进行(GL_FASTEST);GL_PERSPECTIVE_CORRECTION_HINT指定了颜色纹理插值的质量并可纠正由单纯线性插值所带来的一些视觉错误。参数hint可以是:GL_FASTEST(给出最有效的选择)、GL_NICEST(给出最高质量的选择)、GL_DONT_CARE(没有选择)。

 

  虽然在OpenGL的颜色索引模式下也可以实现反走样,但仍建议在RGBA模式下进行。对图元进行反走样时也要先调用glEnable()函数启动反走样(其参数为GL_POINTGL_LINE_SMOOTHGL_POLYGON_SMOOTH)。如果是在RGBA模式下进行反走样,还必须与融合配合使用,通常使用GL_SRC_ALPHAGL_ONE_MINUS_SRC_ALPHA分别作为源和目的因子。

  

    openGL中使用反走样,需要在设置函数中进行设置,下面设置反走样的代码:

// Initialize OpenGL's rendering modes  
void initRendering()  
{  
  glEnable ( GL_DEPTH_TEST );  
 // Uncomment out the first block of code below, and then the second block,  
 //  to see how they affect line and point drawing.  
  
 // The following commands should cause points and line to be drawn larger  
 // than a single pixel width.  
    glPointSize(8);  
glLineWidth(5);  
  
 // The following commands should induce OpenGL to create round points and   
 // antialias points and lines.  (This is implementation dependent unfortunately).  
 // RGBA mode antialias need cooperate with blend function.  
glEnable(GL_POINT_SMOOTH);  
glEnable(GL_LINE_SMOOTH);  
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); // Make round points, not square points  
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);  // Antialias the lines  
glEnable(GL_BLEND);  
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);  
}  

写一个openGL程序画一个点,如果没有抗锯齿,则为方形的。如果我们启动抗锯齿设置,则点是一个圆点。

未启用


启用

写一个opengl 画一个线,很明显,启用抗锯齿后,粗线变成了矩形,而未启动则是一个平行四边形

未启用

启用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值