【问题标题】:How can I draw a line less than 1 pixel wide如何画一条小于 1 像素宽的线
【发布时间】:2016-09-06 19:26:46
【问题描述】:

在 opengl 的上下文中阅读这个我发现了 2 个解决方案:

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

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

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

在处理过程中我将如何做到这一点?

【问题讨论】:

  • 您对此有合法用途吗?亚像素几何是我们通常尽量避免而不是支持的性能瓶颈:)
  • youtube.com/watch?v=ZQ1zjPqJBPQ 我正在努力实现这个效果。当圆圈变得非常小时,它们肯定会开始重叠,我想要的不是 1 个大圆圈,而是仍然有很多小圆圈的错觉。

标签: opengl processing


【解决方案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卡住。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多