我需要用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半径, 谢谢!
答案 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();
因为在这种情况下你必须从中间点绘制正方形,这是两个正方形对角线的相互作用。您使用以下事实并绘制相同的内容。
如果您的点位于0.5,0.5,相互作用点的坐标,侧面为0.2。因此,您可以轻松确定四个角的点坐标,如下图所示,并相应地进行编码。