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.