如何绘制小于1像素宽的线条

时间:2016-09-06 19:26:47

标签: opengl processing

在opengl的上下文中读到这个我找到了2个解决方案:

  1. 如果直线大于1像素,则绘制1像素线但使用Alpha混合使其部分可见。 +更好的结果 - 带有z缓冲的问题(你必须对行进行排序)

  2. 绘制GL_QUAD而不是线 - 您必须自己计算4个顶点坐标 - 在应用程序中或使用顶点着色器。 +使用亚像素精度正确绘制的细线 -line可以出现'虚线'因为片段适合'屏幕上有两个像素,因此没有被绘制。"

  3. https://www.opengl.org/discussion_boards/showthread.php/146742-Line-width-less-than-1-pixel

    我如何处理?

1 个答案:

答案 0 :(得分:1)

您可以使用strokeWeight()函数并传入小于1的值:

strokeWeight(.5);
line(0, 0, width, height);

可以在the reference找到更多信息。

或者,如果您想与OpenGL方法更紧密地对齐......

  

如果直线大于1像素,则绘制1像素线但使用Alpha混合使其部分可见。

只需将stroke()设置为包含alpha的值即可。像这样:

stroke(0, 128);
line(0, 0, width, height);

可以在the reference找到更多信息。

  

绘制GL_QUAD而不是线 - 你必须自己计算4个顶点坐标 - 在应用程序中或使用顶点着色器。 +使用子像素精度线正确绘制的细线可以显示为“虚线”,因为片段在屏幕上的两个像素之间拟合,因此不会被绘制。“

您可以使用beginShape()函数并传入QUADS参数来绘制四边形。像这样:

beginShape(QUADS);
vertex(0, 0);
vertex(0, 0);
vertex(width, height);
vertex(width, height);
endShape();

同样,可以在the reference中找到更多信息。

然后,您可以使用各种着色器函数来使用着色器。你猜对了:在the reference

中可以找到更多信息

除了将您指向Google和the reference之外,很难回答一般的“我该怎么做”这类问题。参考应该是你的第一站。仔细阅读并查找设置alpha值的函数,或绘制四边形或使用着色器。 Stack Overflow更专为特定的“我试过X,期望Y,但得到Z而不是”类型的问题,所以你能做的最好的事情就是尝试一些事情并发布MCVE如果你卡住了祝你好运。