YuraImashev
@YuraImashev
Just a regular guy

Можно ли плавно изменять толщину линии в OpenGL ES?

У меня есть несколько линий и мне нужно плавно изменить их толщину от минимальной (1 px) до какой-то другой (допустим, 3 px). Мне известны координаты концов всех линий, более того, все линии либо вертикальные, либо горизонтальные. Можно ли это сделать средствами OpenGL ES?
Проблема в том, что стандартная функция glLineWidth принимая дробное число, преобразует его в целое, из-за чего толщина линий меняется дискретно.
Если нельзя сделать этого средствами рисования линий, то, возможно, есть другой способ или хитрость, например рисование многоугольников? Просто сложно поверить, что такая простая задача не реализуется средствами такой мощной библиотеки как OpenGL.

Мой код:
- (void)setupGL
{
    [EAGLContext setCurrentContext:self.context];

    self.effect = [[GLKBaseEffect alloc] init];

    glEnable(GL_DEPTH_TEST);

    glGenBuffers(1, &_vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(thinLines), thinLines, GL_STATIC_DRAW);

    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));

    glBindVertexArrayOES(0);
}

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBindVertexArrayOES(_vertexArray);

    self.effect.constantColor = GLKVector4Make(lineR, lineG, lineB, 1.0f);
    [self.effect prepareToDraw];

    glLineWidth(1 + scaleQ);
    glDrawArrays(GL_LINES, 0, thinLinesCount*2);   
}
  • Вопрос задан
  • 3064 просмотра
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Судя по описанию, при использовании экранного сглаживания толщина может быть дробной, а при отключении сглаживания округляется до меньшего целого.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы