首页 > 解决方案 > GPU上的二次曲线笔划宽度

问题描述

我想知道如何使用三角形绘制曲线,所以我最终阅读了这两篇文章。 http://commaexcess.com/articles/6/vector-graphics-on-the-gpu http://www.mdk.org.pl/2007/10/27/curvy-blues

正如我正确理解的那样,硬件在三个顶点上插入 u 和 v 。

这是我的结果

在此处输入图像描述

我的三角形坐标

vec![100.0, 100.0
     100.0, 100.0,
     200.0, 100.0];

紫外线坐标

vec![0.0, 0.0
     0.5, 0.0
     1.0, 1.0]

我的片段着色器看起来像这样

#version 430 core
out vec4 frag_color;

in vec2 uv;
in vec4 cords;

void main() {
  float x = uv.x;
  float y = uv.y;

  float result = (x*x) - y;
  
  if(result > 0.0) {
    frag_color = vec4(1.0, 0.1, 0.5, 1.0);
  } else {
    frag_color = vec4(2.0, 0.2, 3.0, 1.0);
  }
}

我想在中点有一个很好的中风。我尝试了以下。

if(result > 0.01) {
  frag_color = vec4(1.0,0.1,0.5, 1.0);
} else if(result < -0.01) {
  frag_color = vec4(2.0,0.2,1.0, 1.0);
} else {
  frag_color = vec4(2.0, 0.2, 3.0, 0.0); // mid point
}

我懂了

在此处输入图像描述

但是当我尝试调整三角形的大小时,我得到了这个结果

在此处输入图像描述

笔画宽度较粗,但我想保持上一张图像中的宽度。我不知道如何实现这一点,甚至可能吗?

标签: openglrustgraphicsglslgpu

解决方案


推荐阅读