OpenGL ES中的拉伸绘图 - iOS

时间:2011-08-09 19:36:35

标签: iphone ios ipad opengl-es opengl-es-2.0

我正在尝试使用OpenGL ES绘制一个简单的圆圈。问题是圆圈是垂直拉伸的。它看起来更像椭圆而不是圆形。有人能指出问题出在哪里吗?

我使用glViewPort解决了这个问题,但没有成功。正如其他人在Stackoverflow上建议的那样,我也尝试加载一个不同的矩阵而不是单位矩阵,这也不起作用......

这是drawFrame的代码:

- (void)drawFrame
{
    [(EAGLView *)self.view setFramebuffer];

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();       

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

    GLfloat vertices[720];
    for (int i = 0; i < 720; i += 2) 
    {
        vertices[i]   = (cos(degreesToRadians(i)) * 1);
        vertices[i+1] = (sin(degreesToRadians(i)) * 1);
    }

    glVertexPointer(2, GL_FLOAT, 0, vertices);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
    glDrawArrays(GL_TRIANGLE_FAN, 0, 360);

    [(EAGLView *)self.view presentFramebuffer];
}

1 个答案:

答案 0 :(得分:2)

您展示的代码将在世界坐标中绘制一个完美的圆圈。您需要考虑的是这些世界坐标如何转换为窗口坐标,即像素。

如果glViewport设置为始终与窗口匹配,那么窗口的宽高比将决定您使用所显示的代码示例看到的内容。如果窗口是方形的,它将起作用,即你会看到一个完美的圆圈。如果窗口高于宽度,则圆圈将垂直拉伸。

要保留完美的圆形,您可以使用投影矩阵,为您提供与视口/窗口具有相同宽高比的查看体积。我注意到在你第一次编辑之前,你在那里打电话给glOrthof。设置纵横比以匹配那里,这将为您完成工作。如果您想要透视投影而不是正交投影,请使用glFrustum