openGL(c)绘制正方形

时间:2016-07-02 18:17:58

标签: c opengl

我需要用c(openGL)画一个正方形, 我只有1个坐标,它是正方形的中心(比方说0.5,0.5),我需要绘制一个方形ABCD,每边长度为0.2(AB,BC,CD,DA), 我尝试使用下一个函数,但它没有为某些共鸣画出任何东西,

void drawSquare(double x1,double y1,double radius)
{
    glColor3d(0,0,0);
    glBegin(GL_POLYGON);

    double locationX = x1;
    double locationY = x2;
    double r = radius;

    for(double i=0; i <= 360 ; i+=0.1)
    {
        glVertex2d(locationX + radius*i, locationY + radius*i);
    }

    glEnd();
}

有人可以告诉我为什么它不起作用\指向正确的方向(我不想绘制正常4协调的多边形,但只有1个坐标与一个givven半径, 谢谢!

2 个答案:

答案 0 :(得分:2)

您的代码甚至不会画一个圆圈。如果有的话,它将绘制一条非常快速地延伸到视图区域外的对角线。圆形图需要根据半径和角度使用正弦和余弦。

我没有尝试过这段代码,但是需要更像这样画一个正方形。

void drawSquare(double x1, double y1, double sidelength)
{
    double halfside = sidelength / 2;

    glColor3d(0,0,0);
    glBegin(GL_POLYGON);

    glVertex2d(x1 + halfside, y1 + halfside);
    glVertex2d(x1 + halfside, y1 - halfside);
    glVertex2d(x1 - halfside, y1 - halfside);
    glVertex2d(x1 - halfside, y1 + halfside);

    glEnd();
}

没有定义法线:也许我应该逆时针行走。

答案 1 :(得分:1)

绘制正方形的简单方法是使用GL_QUADS并将四个顶点用于正方形的四个角。示例代码低于 -

glBegin(GL_QUADS);
glVertex2f(-1.0f, 1.0f, 0.0f); // top left
glVertex2f(1.0f, 1.0f, 0.0f); // top right 
glVertex2f(1.0f, -1.0f, 0.0f); // bottom right
glVertex2f(-1.0f, -1.0f, 0.0f); // bottom left
glEnd();

因为在这种情况下你必须从中间点绘制正方形,这是两个正方形对角线的相互作用。您使用以下事实并绘制相同的内容。

  • 对角线长度= x *平方根2(x =正方形边)
  • 正方形的对角线垂直
  • 正方形的对角线长度相同

如果您的点位于0.5,0.5,相互作用点的坐标,侧面为0.2。因此,您可以轻松确定四个角的点坐标,如下图所示,并相应地进行编码。

enter image description here