使用 OpenGL ES 在 iOS 上绘制细线
Draw hair thin line on iOS, using OpenGL ES
我正在尝试使用 OpenGL 在 iOS 上绘制一条 1 像素宽的线,但我遇到了问题。
这就是在模拟器中绘制的线(缩放)的样子:
iPhone4S
iPhone 6加
如您所见,线条的宽度超过 1 个像素,并且经过平滑处理。
我认为,这个问题不在 OpenGL 中,而在屏幕比例因子中。
我希望该行在所有类型的屏幕上都是 one-pixel。
我就是这样画线的
- (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];
}
看看http://oleb.net/blog/2014/11/iphone-6-plus-screen/
这表明 iPhone 6 Plus 使用缩放因子,并表示您可以通过 "set the contentScaleFactor of your GLKView to the value of UIScreen.nativeScale"
禁用缩放
希望这能解决您的问题
我正在尝试使用 OpenGL 在 iOS 上绘制一条 1 像素宽的线,但我遇到了问题。
这就是在模拟器中绘制的线(缩放)的样子:
iPhone4S
iPhone 6加
如您所见,线条的宽度超过 1 个像素,并且经过平滑处理。 我认为,这个问题不在 OpenGL 中,而在屏幕比例因子中。 我希望该行在所有类型的屏幕上都是 one-pixel。
我就是这样画线的
- (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];
}
看看http://oleb.net/blog/2014/11/iphone-6-plus-screen/
这表明 iPhone 6 Plus 使用缩放因子,并表示您可以通过 "set the contentScaleFactor of your GLKView to the value of UIScreen.nativeScale"
禁用缩放希望这能解决您的问题