2017-04-24 12 views
0

2dベクトルのQListを使用して、一連の非接続線/円弧を描画し、それらが古いリストの色を退色させようとしています。例についてはQT OpenGL 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の間には、1つの頂点だけが存在します。だからあなたはどんな線も見ていない。今ここにあなたの問題を解決する

は、擬似コードは次のとおりです。ここ

2例

ケース1:あなたが入力点間に線をしたいと仮定すると、

を。 あなたのポイントベクトルが4点p1、p2、p3、p4を持っているなら、私は意味します。 最初の行はp1とp2の間です。 2行目が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の間です。 2行目はcとp2の間にあります。 3行目がcとp3の間です。 4行目は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

ありがとうございました。私の愚かな間違い。 –

関連する問題