Я пытаюсь нарисовать круг в 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);
Использовать gluOrtho2D (-WIDOWS_WIDTH, WIDOWS_WIDTH, -WINDOWS_HEIGHT, WINDOWS_HEIGHT);
Кстати, вы используете фиксированный конвейер в 2013 году. С вершинным шейдером это было бы очень легко понять.
Соотношение сторон вашей 2D проекционной матрицы, определенной gluOrtho2d, должно совпадать с окном просмотра / окном, в котором вы визуализируете, иначе вы заметите искажения на изображениях, которые вы визуализируете. Вы можете использовать вышеприведенный оператор gluOrtho2d или другой способ его написания:
float ar = (float) WindowWidth / WindowHeight;
gluOrtho2D (-1 * ар, ар, -1, 1)