OpenGL - рисование шаблонов - PullRequest
       6

OpenGL - рисование шаблонов

1 голос
/ 02 октября 2019

Attched Image - это то, что я пытаюсь сделать:

Pattern I want

Однако мой код дает мне следующий шаблон:

CODE PATTERN

Кто-нибудь может направить меня в правильном направлении?

void drawPattern(float xPos, float yPos, float length){
    glColor3f(0.0, 1.0, 0.0);
        // Drawing Square 
        glBegin(GL_POLYGON);
        glVertex2f(xPos + length, yPos);
        glVertex2f(xPos, yPos);
        glVertex2f(xPos , yPos + length);
        glVertex2f(xPos + length , yPos + length);
    glEnd();

    glColor3f(0,0,1);
    float halfPi = 0.5 * PI;
    //Drawing Bottom Left Circle
    glBegin(GL_LINE_LOOP);
    for (float angle = 0.0; angle < 90 * 0.01745329; angle += 0.01745329){
        glVertex2f( xPos + (length/2)*cos(angle), yPos + (length/2)*sin(angle));
    }
    glEnd();

    //Drawing Top Right Circle 
    glBegin(GL_LINE_LOOP);
    for (float angle = 0.0; angle < 90 * 0.01745329; angle += 0.01745329){
        glVertex2f( xPos + length/2 + (length/2)*cos(angle), yPos + length/2 + (length/2)*sin(angle));
    }
    glEnd();
}

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Кроме того, что вы должны использовать линейный примитив типа GL_LINE_STRIP вместо GL_LINE_LOOP, что уже упоминалось в ответе, дуга в верхнем правом углу имеет неправильное направление.

Это потому, что центральная точка дуги должна быть верхним левым (xPos + length, yPos + length) углом, а не центром четырехугольника. Далее дуга должна быть нарисована в нижнем левом сегменте. Это достигается вычитанием синусов и косинусов:

glBegin(GL_LINE_STRIP);
for (float angle = 0.0; angle < 90 * 0.01745329; angle += 0.01745329) {
    glVertex2f(
        xPos + length - (length/2)*cos(angle),
        yPos + length - (length/2)*sin(angle));
}
glEnd();
1 голос
/ 02 октября 2019

Это может быть идея использовать GL_LINE_STRIP вместо GL_LINE_LOOP. Последний всегда соединяет конечную точку с начальной точкой, в отличие от первой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...