Рисование круга OpenGL с получением эллипса

Я пытаюсь нарисовать круг в opengl, но я не могу получить правильные координаты, поэтому я всегда получаю многоточие независимо от того, какой метод я использую. Текущий код выглядит следующим образом:

void Ball::Render() {
float center_position_x = _body->GetWorldCenter().x;
float center_position_y = _body->GetWorldCenter().y;
float radius = static_cast<b2CircleShape*>(_body->GetFixtureList()->GetShape())->m_radius;

glBegin(GL_LINE_STRIP);
for(float angle = 0; angle <= 360; ++angle) {
float angleInRadians = glm::radians(angle);
float x = glm::cos(angleInRadians);
float y = glm::sin(angleInRadians);

glVertex3f(x,y,0);
}
glEnd();
}

(Я знаю, что код должен рисовать окружность в начале координат, но даже тогда это не идеальный круг, если я правильно понимаю, что следует рисовать круг в начале координат с радиусом = 1)

Другие методы, которые я использовал, были:
http://slabode.exofire.net/circle_draw.shtml
http://www.opengl.org/discussion_boards/showthread.php/167955-drawing-a-smooth-circle

Это мой код установки окна OpenGL (это программа-заглушка, поэтому я начинаю с жестко закодированных значений):
gluOrtho2D(-10, 15, -10, 15);

1

Решение

Использовать gluOrtho2D (-WIDOWS_WIDTH, WIDOWS_WIDTH, -WINDOWS_HEIGHT, WINDOWS_HEIGHT);

Кстати, вы используете фиксированный конвейер в 2013 году. С вершинным шейдером это было бы очень легко понять.

1

Другие решения

Соотношение сторон вашей 2D проекционной матрицы, определенной gluOrtho2d, должно совпадать с окном просмотра / окном, в котором вы визуализируете, иначе вы заметите искажения на изображениях, которые вы визуализируете. Вы можете использовать вышеприведенный оператор gluOrtho2d или другой способ его написания:

float ar = (float) WindowWidth / WindowHeight;

gluOrtho2D (-1 * ар, ар, -1, 1)

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector