渲染反走样点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了渲染反走样点相关的知识,希望对你有一定的参考价值。

场景

    渲染点的时候,如果尺寸比较大,实际上是一个矩形,需要采用反走样技术。使用反走样要启用混合操作, 确保显卡的反走样设置是用户控制或者打开的。


代码

#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模式。

以上是关于渲染反走样点的主要内容,如果未能解决你的问题,请参考以下文章

计算机图形学——反走样

计算机图形学-光栅化采样走样与反走样滤波与卷积

OpenGL学习脚印: 反走样初步(Anti-aliasing basic)

02 光栅图形学算法-- 扫描转换区域填充反走样

Qt 学习之路 2(26):反走样

WebGPU学习:MSAA