2017-04-24 11 views
0

일련의 비 연결 선/호를 그려 목록에있는 오래된 색상을 희미하게하려면 2 차원 벡터의 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 :

당신이 입력 점 사이의 라인을 원하는 가정은. 만약 당신의 포인트 벡터가 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

고맙습니다. 내 멍청한 실수. –