1

我试图在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);

4

2 回答 2

1

使用 gluOrtho2D(-WIDOWS_WIDTH, WIDOWS_WIDTH, -WINDOWS_HEIGHT, WINDOWS_HEIGHT);

顺便说一句,您在 2013 年使用的是固定管道。使用顶点着色器,这将很容易理解。

于 2013-04-24T18:31:35.037 回答
1

由 gluOrtho2d 定义的 2D 投影矩阵的纵横比必须与您正在渲染的视口/窗口相同,否则您会注意到正在渲染的图形中的失真。您可以使用上述 gluOrtho2d 语句或其他编写方式 -

浮动 ar = (float)WindowWidth/WindowHeight;

gluOrtho2D(-1*ar, ar, -1, 1)

于 2013-04-24T21:28:43.150 回答