绘制正方形时OpenGL圆半径问题

时间:2014-11-02 15:15:09

标签: opengl glfw

我有一个绘制圆圈的功能。

glBegin(GL_LINE_LOOP);
for(int i = 0; i < 20; i++)
{
    float theta = 2.0f * 3.1415926f * float(i) / float(20);//get the current angle

    float rad_x = ratio*(radius * cosf(theta));//calculate the x component
    float rad_y = radius * sinf(theta);//calculate the y component

    glVertex2f(x + rad_x, y + rad_y);//output vertex

}
glEnd();

这很有用。我将x,y和radius值保存在我的对象中。

然而,当我尝试使用以下函数调用绘制正方形时:

newSquare(id, red, green, blue, x, (x + radius), y, (y + radius));

我得到以下图片。

enter image description here

如你所见,正方形几乎是宽度的两倍(看起来更像是直径)。以下代码是我创建方框的方法。正如你所看到的那样,它始于圆圈的中心。并应伸展到圆圈的边缘。

glBegin(GL_QUADS);
    glVertex2f(x2, y2);
    glVertex2f(x2, y1);
    glVertex2f(x1, y1);
    glVertex2f(x1, y2);
glEnd();

我似乎无法理解为什么会这样!

1 个答案:

答案 0 :(得分:1)

如果你正在纠正一个物体的x位置,你也必须为所有其他物体做这个。

但是,如果你继续这样做,你很快就会遇到麻烦。在您的情况下,只纠正对象的宽度,但不纠正它们的位置。您可以通过设置正交投影矩阵来解决所有问题,并且您无需再次更正位置。例如。像这样:

glMatrixMode(GL_PROJECTION); //switch to projection matrix
glOrtho(-ratio, ratio, -1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW); //switch back to model view

,其中

ratio = windo width / window height

这构造了一个坐标系,其中上边缘为y=1,下边缘为y=-1,左右边分别为x=-ratiox=ratio