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

これは私の OpenGL ウィンドウ セットアップ コードです (これはスタブ プログラムなので、ハードコードされた値から始めています)。 gluOrtho2D(-10, 15, -10, 15);

4

2 に答える 2

1

gluOrtho2d によって定義された 2D 射影行列の縦横比は、レンダリングしているビューポート/ウィンドウと同じでなければなりません。そうしないと、レンダリングしている図に歪みが生じます。上記の gluOrtho2d ステートメントまたは他の書き方を使用できます-

float ar = (float)WindowWidth/WindowHeight;

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

于 2013-04-24T21:28:43.150 に答える
1

gluOrtho2D(-WIDOWS_WIDTH, WIDOWS_WIDTH, -WINDOWS_HEIGHT, WINDOWS_HEIGHT); を使用します。

ところで、2013 年に固定パイプラインを使用しています。頂点シェーダーを使用すると、これは非常に理解しやすくなります。

于 2013-04-24T18:31:35.037 に答える