OpenGL: перспективный вид не по центру?

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

1 ответ

Решение

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

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.

Другие вопросы по тегам