场景
渲染点的时候,如果尺寸比较大,实际上是一个矩形,需要采用反走样技术。使用反走样要启用混合操作, 确保显卡的反走样设置是用户控制或者打开的。
代码
#include <GL/glut.h>
void myDisplay(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glPointSize(10.0f);
glBegin(GL_POINTS);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(0.0, 0.0);
glEnd();
glFlush();
return;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
建议
一般要画效果比较好的圆点,最好是使用纹理。
反走样思路
将相邻阶梯之间的像素颜色设置为过渡色,使之变化柔和,从而物体显得平滑
问题
1)OpenGL中函数glPointSize的参数解释是指定栅格化点的直径
实际上设置为10.0f的情况下,点已经设置为最大值,无法继续扩大
2)glBegin(GL_POINTS);函数的参数值是GL_POINTS,而不是GL_POINT,切记
3)glPointSize(10.0f);函数的调用必须位于glBegin(GL_POINTS)之前
4)glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);函数的第二个参数值指定GL_ONE无效,该值对于直线的交点才有效
5)画线条(即使只画一根线条)时候应该传GL_LINES, 不小心传了GL_LINE,编译也不会报错
,但就是没效果。画点GL_POINTS,四边形GL_QUADS。不小心写了GL_QUAD 编译报错 使用了未定义的枚举变量。GL_LINE,GL_POINT,opengl中用来定义多边形的绘制模式,还有GL_FILL模式。