使用OpenGL ES在iOS上绘制细线

时间:2015-01-04 20:43:59

标签: ios opengl-es drawing line

我正在尝试使用OpenGL在iOS上绘制1像素宽的线,我遇到了问题。

这就是模拟器中绘制的线条(缩放)的样子:

iPhone 4S iPhone 4S

iPhone 6 Plus iPhone 6 Plus

正如您所看到的,直线宽度超过1像素,并且平滑。 我认为,这个问题不是在OpenGL中,而是在屏幕比例因子中。 我希望这条线在所有类型的屏幕上都是一个像素。

这就是我画线的方式

- (void)drawView {
    [EAGLContext setCurrentContext:context];

    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
    glViewport(0, 0, backingWidth, backingHeight);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glDisable(GL_LINE_SMOOTH);
    glDisable(GL_BLEND);
    glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f);

    glMatrixMode(GL_MODELVIEW);

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    GLfloat vertices[4];
    vertices[0] = -0.5;
    vertices[1] = 0;
    vertices[2] = 0.5;
    vertices[3] = 0;

    glVertexPointer(2, GL_FLOAT, 0, vertices);
    glEnableClientState(GL_VERTEX_ARRAY);

    glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
    glLineWidthx(1.0f);

    glDrawArrays(GL_LINE_STRIP, 0, 2);

    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
    [context presentRenderbuffer:GL_RENDERBUFFER_OES];
}

1 个答案:

答案 0 :(得分:1)

查看http://oleb.net/blog/2014/11/iphone-6-plus-screen/

这表明iPhone 6 Plus使用缩放因子,并表示可以通过“将GLKView的contentScaleFactor设置为UIScreen.nativeScale的值”来禁用缩放。

希望这能解决您的问题