使用gluLookAt在2D iPhone游戏中移动相机?

时间:2011-02-03 20:29:03

标签: iphone opengl-es camera

我正在尝试使用gluLookAt在我的iPhone游戏中移动相机,但每次我尝试使用gluLookAt我的屏幕只是“空白”(在这种情况下为灰色)

我正在尝试渲染一个简单的三角形并移动相机,这是我的代码:

设置我的场景:

glViewport(0, 0, backingWidth, backingHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glRotatef(-90.0, 0.0, 0.0, 1.0); //using iPhone in horizontal mode
glOrthof(-240, 240, -160, 160, -1, 1);
glMatrixMode(GL_MODELVIEW);

然后我的“三角渲染”代码如下:

GLfloat  triangle[] = {0, 100, 100, 0, -100, 0,};
glClearColor(0.7, 0.7, 0.7, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(1.0, 0.0, 0.0, 1.0);
glVertexPointer(2, GL_FLOAT, 0, &triangle);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableClientState(GL_VERTEX_ARRAY);

这会在屏幕中间画一个红色三角形,当我尝试应用gluLookAt时(我从Cocos2D获得了函数的实现,所以我认为它是正确的),我这样做:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,1,0,0,0,0,0,1); // try to move the camera a bit ?

GLfloat  triangle[] = {0, 100, 100, 0, -100, 0,};
glClearColor(0.7, 0.7, 0.7, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(1.0, 0.0, 0.0, 1.0);
glVertexPointer(2, GL_FLOAT, 0, &triangle);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableClientState(GL_VERTEX_ARRAY);

这导致我灰色屏幕(glClearColor是灰色的),我已经尝试了各种各样的东西并阅读了我在网上发现的关于gluLookAt的内容,但没有运气:(,如果有人可以解释我或告诉我如何以自上而下的方式移动相机(塞尔达等),我真的很感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

最后3个参数看起来不正确。您在正Z方向上制作“向上”向量,这意味着您的视图方向与三角形的平面平行(因此三角形不再可见)。你可以尝试:

gluLookAt(0,0,1,0,0,0,0,1,0);

但是,如果您只想向上/向下/向左/向右移动视图,那么您可以改为使用glTranslatef,例如:

glTranslatef(100.0f, 20.0f, 0.0f);

这应该使你的三角形在右边100像素,在顶部20像素。