Почему я не могу отобразить один и тот же объект в нескольких окнах просмотра? - PullRequest
2 голосов
/ 12 марта 2010

Я довольно новичок в OpenGL. Я играл с каким-то кодом, но не могу понять, почему следующее не приведет к созданию двух окон просмотра с одинаковым видом объекта Вот код:

glViewport(0, windowHeight/2, windowWidth/2, windowHeight);
glScissor(0, windowHeight/2, windowWidth/2, windowHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective( 45.0, (GLfloat)(windowWidth/2)/(GLfloat)(windowHeight/2), 0.1f,  
                500.0 ); 
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
drawParticleView();

glViewport(windowWidth/2, 0, windowWidth, windowHeight/2);
glScissor(windowWidth/2, 0, windowWidth, windowHeight/2);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective( 45.0, (GLfloat)(windowWidth/2)/(GLfloat)(windowHeight/2), 0.1f, 
                500.0 ); 
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
drawParticleView();

drawParticleView() просто рисует массив прямоугольников. Проблема в том, что второй видовой экран является сжатым представлением первого. У меня ширина окна 1280, а высота 960. Я явно что-то делаю не так, но что? Спасибо

1 Ответ

3 голосов
/ 12 марта 2010

Параметры для glViewport - это нижний левый угол вашего окна просмотра в виде x и y, затем ширина и высота.

Для окна площадью 100 пикселей ваши два видовых экрана указаны как:

x1 = 0, y1 = 50, ширина1 = 50, высота1 = 100.

x2 = 50, y2 = 0, ширина2 = 100, высота2 = 50.

Эти размещения и размеры помещают первый видовой экран в верхний левый квадрант вашего окна, висящий наполовину в верхней части окна, а второй - в нижний левый квадрант вашего окна, висящий наполовину с боковой стороны окна.

Для боковых окон просмотра, я думаю, вы хотите:

glViewport(0, 0, windowWidth/2, windowHeight);
// drawing code
glViewport(windowWidth/2, 0, windowWidth/2, windowHeight); 
// repeat drawing code

Или вид сверху и снизу, я думаю, вы хотите:

glViewport(0, 0, windowWidth, windowHeight/2);
// drawing code
glViewport(0, windowHeight/2, windowWidth, windowHeight/2); 
// repeat drawing code

Причина, по которой ваш второй видовой экран сдавлен, заключается в том, что его соотношение сторон инвертировано, и поэтому параметр gluPerspective неправильный. Параметр соотношения сторон должен быть (windowWidth/2)/windowHeight для первого варианта выше и windowWidth/(windowHeigh/2) для второго варианта выше.

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