OpenGL ES 3d旋转会导致无意的翻译?

我正在开发一个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版本看起来不一样?

编辑:为了澄清,我尝试在glRotatef调用的上方和下方添加glTranslatef()调用,但这似乎对我的相机角度有影响。 在上面的代码之后立即将相机代码应用于我的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。


我仍然不确定为什么发生这种情况,但是我将轮播从投影转移到了模型视图,并且一切正常。 我认为这与Windows窗口具有不同的形状(320x480或480x320)不匹配iPhone形状(始终为320x480)有关。

链接地址: http://www.djcxy.com/p/33895.html

上一篇: OpenGL ES 3d rotation causes unintentional translation?

下一篇: Trying to draw textured triangles on device fails, but the emulator works. Why?