我有一个绘制圆圈的功能。
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));
我得到以下图片。
如你所见,正方形几乎是宽度的两倍(看起来更像是直径)。以下代码是我创建方框的方法。正如你所看到的那样,它始于圆圈的中心。并应伸展到圆圈的边缘。
glBegin(GL_QUADS);
glVertex2f(x2, y2);
glVertex2f(x2, y1);
glVertex2f(x1, y1);
glVertex2f(x1, y2);
glEnd();
我似乎无法理解为什么会这样!
答案 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=-ratio
和x=ratio
。