Параметры для 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)
для второго варианта выше.