Я работаю над проектом для iPhone, где мне нужно горизонтальное и вертикальное расположение. У меня он отлично работает в 2D, используя следующую настройку для моей матрицы проекции:
if(isHoriz()){
glRotatef(90.0f,0.0f,0.0f,1.0f);
SOrtho(0, 480, 0, 320, -1, 1);
}
else
SOrtho(0, 320, 0, 480, -1, 1);
Проблема заключается в том, что я перехожу в 3D
glViewport(0,0,320,480);
glScissor(0,0,320,480);
gluPerspective(28.8f,320/480,0.1f,1000.0f);
if(isHoriz())
glRotatef(90.0f,0.0f,0.0f,1.0f);
Кажется, это работает, но вид смещен вертикально неправильно. Я хочу, чтобы верхняя половина вертикального дисплея стала центром горизонтального дисплея. Вместо этого кажется, что середина вертикального дисплея становится центром горизонтального дисплея.
Поскольку это iphone, высота окна (480) и ширина (320) остаются постоянными независимо от поворота. Я попытался встроить тот же код в программу Windows, и код, который дает эффект, который я хочу для горизонтального вращения, прост. Я просто изменяю форму окна, чтобы у меня было альбомное окно, а затем удаляю вызов на
if(isHoriz())
glRotatef(90.0f,0.0f,0.0f,1.0f);
(я тоже делаю что-то похожее на 2D-код).
Я что-то не так делаю? Почему версия для Windows и версия для iPhone не выглядят одинаково?
Редактировать: Чтобы уточнить, я попытался добавить вызовы glTranslatef () выше и ниже вызова glRotatef, но это, похоже, влияет на угол моей камеры. Код камеры применяется к моей матрице modelView сразу после кода выше. Это выглядит так:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(mRotate.mZ,0,0,1);
glRotatef(mRotate.mY,0,1,0);
glRotatef(mRotate.mX,1,0,0);
glTranslatef(-mPos.mX,-mPos.mY,-mPos.mZ);
Начальные значения камеры: mRotate.mX = -80, mPos.Z = -8.