2015-01-16 3 views
0

Я рисую несколько строк с помощью OpenGL ES и мне нужно, чтобы изменить их толщину от 1 pixel до 3 pixels плавно, но glLineWidth не позволяет установить толщину линии между 1.0 и 2.0. Возможно ли это?Плавного изменения толщины линии с использованием OpenGL ES

Вот мой код

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

Влияет ли glLineWidth здесь? Вы должны просто настроить вершины в _vertexArray/_vertexBuffer, ведь они определяют местоположение и, следовательно, ширину того, что вы пытаетесь сделать. – LearnCocos2D

+0

@ LearnCocos2D, может быть, он имел в виду толщину отдельных линий. – rakeshbs

+0

@ LearnCocos2D Да, но это так, но 'glLineWidth' может делать только строчную ширину линии, а не дробную. –

ответ

1

OpenGL ES (включая 3.0) не поддерживает сглаженные линии. Из документации glLineWidth:

Фактическая ширина определяется путем округления прилагаемого к ширине ближайшего целого числа.

Так что, к сожалению, вы не можете «плавно» изменить толщину линии.

+0

И нет никакого способа или трюка, который я могу использовать, чтобы он выглядел как плавное изменение толщины линии? –

+0

Использование n GL_LINES - Нет. Но вы можете попытаться нарисовать линию как прямоугольник и «плавно» изменить одно из своих деменций. – Truggvy

+0

, но как я могу установить ширину этого прямоугольника в пикселях? Поскольку iPhone имеет разные экраны с разными разрешениями. Как я могу сделать этот прямоугольник шириной 2 пикселя (например) на всех устройствах? –