OpenGL中是否有API可以画圆?

时间:2018-11-30 10:43:19

标签: opengl

我发现在谈论画圆时,我得到的所有示例都是使用基本API来组成一个圆。

例如,按度和绘制线进行迭代。

我想知道是否有一个“内置”版本可以画一个圆?如您所见,迭代器可以通过使用GPU并行运行,这看起来更快。

还有,着色器可以并行进行吗?

而且,这是否意味着如果我真的很在意性能,我必须编写一个着色器吗?

1 个答案:

答案 0 :(得分:1)

没有内置功能,但是您确实可以在GPU上执行循环。这就是this article使用几何着色器执行的操作,它看起来像这样:

#version 150 core

layout(points) in;
layout(line_strip, max_vertices = 64) out;

in vec3 vColor[];
in float vSides[];
out vec3 fColor;

const float PI = 3.1415926;

void main()
{
    fColor = vColor[0];

    // Safe, GLfloats can represent small integers exactly
    for (int i = 0; i <= vSides[0]; i++) {
        // Angle between each side in radians
        float ang = PI * 2.0 / vSides[0] * i;

        // Offset from center of point (0.3 to accomodate for aspect ratio)
        vec4 offset = vec4(cos(ang) * 0.3, -sin(ang) * 0.4, 0.0, 0.0);
        gl_Position = gl_in[0].gl_Position + offset;

        EmitVertex();
    }

    EndPrimitive();
}

您会看到每个传入的顶点都围绕其位置转换为规则的多边形。