У меня есть несколько линий и мне нужно плавно изменить их толщину от минимальной (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);
}