由离散点组成的数字图像,与真实景物之间存在一定误差。表现为线条呈现锯齿状、图形细节失真等等,就叫做走样。
Antialiasing反走样就是将原相邻阶梯之间的像素颜色设置为过渡色,使变化柔和,物体就显得平滑了。
glEnable( GL_POINT_SMOOTH );
glEnable( GL_LINE_SMOOTH );
glEnable( GL_POLYGON_SMOOTH );
// 启用反走样
可以调用glHint()函数对图像质量和绘制速度之间的进行权衡。
glHint( GLenum target , GLenum hint );
参数target:
GL_POINT_SMOOTH_HINT
GL_LINE_SMOOTH_HINT
GL_POLYGON_SMOOTH_HINT
指定点、线、多边形的采样质量
GL_FOG_HINT
指出雾的计算的精度
GL_PERSPECTIVE_CORRECTION_HINT
指定颜色和纹理坐标插值的质量
参数hint:
GL_FASTEST
最快速度
GL_NICEST
最高质量
GL_DONT_CARE
不进行选择
示例
当按下 Escape 键时 主程序退出
当按下 Enter 键时 开始/停止移动
当双击窗体时 改变窗体状态
程序截图
源码下载
CSharp_OpenGL_Antialiasing.rar 74KB
这里还有一个反走样直线的示例:反锯齿直线
绿色线条使用了线条平滑(反锯齿)
白色线条没有使用 在旋转中可以明显的看到锯齿
当然质量与性能是成反比的 况且我们有时候还需要锯齿效果
按回车键 开始/停止旋转
Screenshot
关键代码
public override void glDraw()
{
... ...
GL.glDisable( GL.GL_LINE_SMOOTH ); // 禁用 线条平滑
GL.glColor3f( 1.0f , 1.0f , 1.0f ); // 白色
GL.glBegin( GL.GL_LINES ); // 开始绘制线条
GL.glVertex2f( -0.3f , 1.8f ); // 两点确定一条直线 ( 汗 )
GL.glVertex2f( -0.3f , -1.8f );
GL.glEnd (); // 绘制结束
// #####################################################
GL.glEnable( GL.GL_LINE_SMOOTH ); // 启用 线条平滑 即 反锯齿线条
GL.glColor3f( 0.0f , 1.0f , 0.0f ); // 绿色
GL.glBegin( GL.GL_LINES ); // 开始绘制线条
GL.glVertex2f( 0.3f , 1.8f );
GL.glVertex2f( 0.3f , -1.8f );
GL.glEnd (); // 绘制结束
}
阅读(3978) | 评论(1) | 转发(0) |