Antialiasing
Another use for OpenGL’s blending capabilities is antialiasing.
Turning on antialiasing is simple.
First: you must enable blending and set the blending function.
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Second: choose to antialias points, lines, and/or polygons(any solid primitive) by calling glEnable:
glEnable(GL_POINT_SMOOTH); // Smooth out points.(smooth out: 使平滑)
glEnable(GL_LINE_SMOOTH); // Smooth out lines.
glEnable(GL_POLYGON_SMOOTH); // Smooth out polygon edges.
Third: give hint to do the best job possible:
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
Solid objects antialiasing called "multisampling", more tedious rules.
Point and line smoothing is widely supported, but unfortunately polygon smoothing is not available on all platforms. Even when GL_POLYGON_SMOOTH is available, it is not as convenient a means of having your whole scene antialiased as you might think. Because it is based on the blending operation, you would need to sort all your primitives from front to back! Yuck.
Multisample(抽样):
A more recent addition to OpenGL to address this shortcoming is multisampling. When this feature is supported (it is an OpenGL 1.3 feature), an additional buffer is added to the framebuffer that includes the color, depth, and stencil values. All primitives are sampled multiple times per pixel, and the results are stored in this buffer.
First: you must obtain a rendering context that has support for a multisampled framebuffer.
setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer | QGL::SampleBuffers));
Second: turn multisampling on or off:
glEnable(GL_MULTISAMPLE); // glDisable(GL_MULTISAMPLE);
Another important note about multisampling is that when it is enabled, the point, line, and polygon smoothing features are ignored if enabled. On a given OpenGL implementation, points and lines may look better with smoothing turned on instead of multisampling.