Раскраска петли сплайна в OpenGL. - PullRequest
0 голосов
/ 19 октября 2019

У меня есть сплайновая петля Catmull rom в C ++. Я могу сделать сплайн, и у меня есть точки кривой, но когда я попытался заполнить граничную область GL_TRIANGLE_FAN, я получил слишком много прямой линии. И мой вопрос: как я могу эффективно заполнить область сплайн-цикла цветом?

Вот как я рисую сплайн:

glBindVertexArray(vao);
unsigned int vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(lines) * sizeof(float), lines, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINE_STRIP, 0, vecLinePoints.size());

РЕДАКТИРОВАТЬ: Вот как я пытался заполнить мой вогнутый полигон:

 glClear(GL_DEPTH_BUFFER_BIT);
    glDisable(GL_STENCIL_TEST);
    glStencilMask(0xFF);
    glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
    glStencilOp(GL_INVERT, GL_INVERT, GL_INVERT);
    glClear(GL_STENCIL_BUFFER_BIT);  

    glBindVertexArray(vao);
    unsigned int vbo;
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(polyPoints) * sizeof(float), polyPoints, GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glBindVertexArray(vao);
    glDrawArrays(GL_TRIANGLE_FAN, 0, vecPoints.size());

    glStencilMask(0x00);
    glStencilFunc(GL_NOTEQUAL, 0, 0xFF);
    glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
    glDisable(GL_STENCIL_TEST);
...