OpenGL: перспективный вид не по центру? - PullRequest
2 голосов
/ 22 февраля 2011

У меня есть главная сцена с центром в центре области просмотра
, в дополнение к этому я хочу, чтобы другой маленький объект отображался в углу области просмотра.Беда в том, что когда я рисую маленький объект, он трансформируется основным проекционным преобразованием и выглядит наклонным.Я хочу, чтобы у маленького объекта была своя точка схода с центром в центре.
Возможно ли это, что просто трансформирует?

1 Ответ

1 голос
/ 22 февраля 2011

Вы хотите, чтобы ваша основная сцена проецировалась одним способом, а ваш угловой объект - другим.Это напрямую приводит вас к решению:

void render() {
    glMatrixMode(GL_PROJECTION);
    setUpMainProjection();
    glMatrixMode(GL_MODELVIEW);
    drawMainObject();

    glMatrixMode(GL_PROJECTION);
    setUpCornerProjection();
    glMatrixMode(GL_MODELVIEW);
    drawCornerObject();
}

Возможно, вам интересно, как реализовать setUpCornerProjection.Это выглядело бы примерно так:

// let's say r is a rect, which, in eye space, contains the corner object and is
// centered on it
glFrustum(r.left, r.right, r.bottom, r.top, nearVal, farVal);
// let's say p is the rect in screen-space where you want to
// place the corner object
glViewport(p.x, p.y, p.width, p.height);

А затем в setUpMainProjection () вам также необходимо вызвать glFrustum и glViewport.

...