0

这是我用于转换点的实用函数:

void translatePoints(float x, float y, int transX, int transY)
{
    glMatrixMode(GL_MODELVIEW);
    //glLoadIdentity();
    glBegin(GL_LINES);
    // original points
    glVertex2f(x,y);    
    glVertex2f(x + transX, y + transY);
    glEnd();
    glFlush();
}

我有类似的功能来绘制圆、缩放点和旋转点 不使用矩阵平移,我必须从 myDisplay 传递 x 和 y 值,并使形状从中心平移、缩放和旋转。如果我有一个有 6 个点的形状,比如星星,这个功能就不起作用。我想这个函数必须返回两个点,否则我可以使用指针。但我不确定如何实现这些,我也相信我不应该在这个函数中画出这些点。最后,我必须绘制不同形状的场景。

4

2 回答 2

1

我想你想要的是

glVertex2f(x + transX, y + transY);
glVertex2f(a + transX, b + transY);

您的线从 (x,y) 到 (a,b) 的位置。您正在从原始点到已翻译的原始点画一条线,而不是翻译这两个点。

希望我正确地解释了你的问题

于 2013-03-15T07:26:27.237 回答
1

我理解你的问题,我试图在这里解释。例如,让您使用四个点绘制 2D 正方形。制作一个变量来保存绘制正方形的坐标值,让我们假设变量名称如下

x1, y1, z
x2, y2, z
x3, y3, z
x4, y4, z

这里z坐标是固定的。现在,如果您想创建一个函数来平移正方形,那么像这样实现您的函数。

void translateSquare(int transX, int transY)
{
  x1 + transX; y1 + transY;
  x2 + transX; y2 + transY;
  x3 + transX; y3 + transY;
  x4 + transX; y4 + transY;
}

当您调用此函数时,您的正方形将通过值 transX 和 transY 进行平移。因此,为您的显示器制作一个类似这样的功能。

于 2013-03-15T11:41:59.383 回答