我正在开发一个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。
答案 0 :(得分:0)
我仍然不确定为什么会发生这种情况,但是我将我的旋转从投影转移到了模型视图,一切正常。我认为这与Windows窗口具有不同形状(320x480或480x320)的事实有关,这种形状与iPhone形状不匹配(总是320x480)。