статический круг в openGL - PullRequest
       3

статический круг в openGL

0 голосов
/ 18 декабря 2011

Я надеюсь, что вы можете помочь мне с небольшой проблемой ...

Я знаю, как нарисовать круг, это не проблема - вот код в c #

void DrawEllipse()
{
    GL.Color3(0.5, 0.6, 0.2);
    float x, y, z;
    double t;
    GL.Begin(BeginMode.Points);
    for (t = 0; t <= 360; t += 0.25)
    {
        x = (float)(3*Math.Sin(t));
        y = (float)(3*Math.Cos(t));
        z = (float)0;
        GL.Vertex3(x, y, z);
    }
    GL.End();

}

Но есть проблема - когда я вращаю 'Gl.Rotate (angle, axis)', а затем перерисовываю круг - да, это все еще круг в 3D, но я хочу круг на экране - я имею в виду статический круг который не вращается с трехмерным объектом в нем ... Это возможно? Как восстановить код?

Ответы [ 3 ]

1 голос
/ 18 декабря 2011

Вы пытаетесь нарисовать 2D-круг поверх 3D-сцены, чтобы создать HUD или подобное?Если это так, вам следует исследовать 2D OpenGL, glOrtho и использовать несколько видовых экранов в сцене.Здесь обсуждается вопрос: http://www.gamedev.net/topic/388298-opengl-hud/

0 голосов
/ 18 декабря 2011

HUD (отображение заголовка): http://en.wikipedia.org/wiki/HUD_(video_gaming)

void setupScene ()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    // set the perspective
    glFrustum(...) // or glu's perspective
}


void loop ()
{
    // main scene
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glViewport (...)
    // push the camera position into GL_MODELVIEW
    // (i.e. the inverse matrix of its object position)

    // draw your normal 3D objects


    // switch to 2D projection (for the HUD)
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(....)

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // draw the objects onto the HUD

    // switch back to 3d projection (i.e. restore GL_PROJECTION)
    // glEnable (GL_DEPTH_TEST);
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    // glMatrixMode(GL_MODELVIEW);

    // swap buffers
}

Код комментария не обязателен, в зависимости от того, что вы собираетесь делать в конце.Прими это как подсказку.

0 голосов
/ 18 декабря 2011

Просто нарисуйте его в положении перед камерой!Используйте pushMatrix() и popMatrix().

Или вы можете нарисовать другие вещи между pushMatrix() и popMatrix().Затем нарисуйте круг.

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