Вращение OpenGL ES 3d вызывает непреднамеренный перевод? - PullRequest
2 голосов
/ 16 октября 2010

Я работаю над проектом для 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.

1 Ответ

0 голосов
/ 22 октября 2010

Я до сих пор не уверен, почему это произошло, но я переместил вращение с проекции на вид модели, и все работает нормально.Я думаю, что это связано с тем, что окно Windows имело различную форму (либо 320x480, либо 480x320), которая не соответствовала форме iPhone (всегда 320x480).

...