0

我正在尝试使用 2d 矢量的 QList 来绘制一系列非连接线/弧,并随着它们在列表中的旧颜色褪色。

例如:

void drawArcs(QList<QVector2D>& points,
               float centerX, float centerY,
               float red, float green, float blue)
{
glBegin(GL_LINE_STRIP);
float colorGain;
int INC;
INC=0;
colorGain=float(INC)/float(TotalArcPoints);
foreach (const QVector2D& vec, points)
{

    glColor3f(colorGain*red, colorGain*green, colorGain*blue);

    glVertex3f( vec.x() + centerX,
                    - vec.y() + centerY,
                    0.0);

    INC++;
    colorGain=float(INC)/float(TotalArcPoints);
}
glEnd();
}

但是,这将我所有的弧连接在一起,我希望 QList 中的每组 2D 向量都是它自己的弧,但是当我将代码更改为此时。它什么也没画,屏幕是空白的。

void drawArcs(QList<QVector2D>& points,
               float centerX, float centerY,
               float red, float green, float blue)
{

float colorGain;
int INC;
INC=0;
colorGain=float(INC)/float(TotalArcPoints);
foreach (const QVector2D& vec, points)
{
    glBegin(GL_LINE_STRIP);
    glColor3f(colorGain*red, colorGain*green, colorGain*blue);

    glVertex3f( vec.x() + centerX,
                    - vec.y() + centerY,
                    0.0);

    INC++;
    colorGain=float(INC)/float(TotalArcPoints);
    glEnd();
}

}

颜色映射在上面的代码中工作正常,所以我不认为这是问题所在。我更困惑为什么在 for each 循环内移动 glBegin/glEnd 不会导致任何内容被绘制。

有任何想法吗?

4

1 回答 1

0

在你的函数中,只有一个顶点,

所以在(您的代码的)第一个函数中:所有顶点都在glBeginand之间连接glEnd

在(您的代码的)第二个函数中:glBegin和之间glEnd,只有一个顶点。所以你没有看到任何线条。

现在解决你的问题是伪代码:

这里有两个案例

情况1:

假设您想要输入点之间的线。我的意思是,如果您的点向量有 4 个点 p1、p2、p3、p4。第一行在 p1 和 p2 之间。第二行在 p3 和 p4 之间。

for(int i = 0; i<points.size(); i++)
{

    glBegin(GL_LINE_STRIP);

    //FIRST POINT OF THE LINE
    glVertex3f( points.at(i).x() + center.x, 
                    - points.at(i).y() + center.y,
                    0.0);

    i = i + 1;

    //SECOND POINT OF THE LINE
    glVertex3f( points.at(i).x() + center.x, 
                    - points.at(i).y() + center.y,
                    0.0);
    glEnd();

}

案例二:

假设您想要中心和点之间的线。我的意思是,如果您的点向量有 4 个点 p1、p2、p3、p4。第一行在 c 和 p1 之间。第二行在 c 和 p2 之间。第三行在 c 和 p3 之间。第四行在 c 和 p4 之间。

for(int i = 0; i<points.size(); i++)
{

    glBegin(GL_LINE_STRIP);

    //FIRST POINT OF THE LINE (CENTER)
    glVertex3f( center.x, center.y,0.0);

    //SECOND POINT OF THE LINE
    glVertex3f( points.at(i).x() + center.x, 
                    - points.at(i).y() + center.y,
                    0.0);
    glEnd();
}
于 2017-04-24T21:19:11.597 回答