2017-04-24 113 views
0

我想使用2d向量的QList繪製一系列非連接線/弧,淡入淡出他們在列表中的顏色。QTs OpenGL QVectors2D QVectors2D沒有正確繪圖

例如:

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(); 
} 

} 

顏色映射在上面的代碼中正常工作,所以我不認爲這是問題。我更困惑的是爲什麼在每個循環中移動glBegin/glEnd不會導致任何事情。

任何想法?

回答

0

在你的函數,只有一個頂點,

所以在第一功能(你的代碼中):所有頂點越來越連接glBeginglEnd之間。

第二功能(你的代碼中)之間glBeginglEnd,只有一個頂點。所以你沒有看到任何線。

我們解決您的問題這裏是僞代碼:這裏

2案件

案例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(); 

} 

案例2:

假設你想要的中心和點之間的線路。 我的意思是,如果你的點向量有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(); 
} 
+0

謝謝你這個工作。對我來說愚蠢的錯誤。 –