Есть ли в OpenGL API для рисования круга? - PullRequest
0 голосов
/ 30 ноября 2018

Я обнаружил, что, говоря о рисовании круга, все примеры, которые я получил, - это использование базового API для создания круга.

Например, итератор по степени и рисование линий.

Мне было интересно, есть ли «встроенная» версия для рисования круга?Как видите, итератор может работать параллельно с использованием графического процессора, он кажется быстрее.

Более того, может ли шейдер делать это параллельно?

И значит ли это, что у меня естьнаписать шейдер, чтобы сделать это, если я действительно забочусь о производительности?

1 Ответ

0 голосов
/ 30 ноября 2018

Нет встроенной функции, но вы действительно можете выполнить цикл на графическом процессоре.Это именно то, что эта статья выполняет с использованием геометрического шейдера, который выглядит следующим образом:

#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();
}

Вы можете видеть, что каждая входящая вершина превращается в правильный многоугольник вокруг своей позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...