代码之家  ›  专栏  ›  技术社区  ›  Dan Loewenherz Snowman

为什么我的对象在使用gluLookat for OpenGL ES 2.0后会消失?

  •  2
  • Dan Loewenherz Snowman  · 技术社区  · 14 年前

    我正在为iPhone编写一个简单的游戏,并试图实现在GLView中移动相机的效果。

    我画了大约一百个物体 glDrawArrays drawView 方法。我将矩阵模式更改为投影堆栈,然后在项目操作完成后更改回模型视图模式(我可能弄错了,我是OpenGL的新手)。

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glTranslatef(1.0, 0.0, 0.0);
    glMatrixMode(GL_MODELVIEW);
    

    glTranslatef 在上面的街区。

    我做错什么了?

    之前

    alt text

    之后

    alt text

    2 回复  |  直到 4 年前
        1
  •  6
  •   Carlos Scheidegger    14 年前

    对于初学者来说,OpenGL的一个令人困惑的方面是投影矩阵和modelview矩阵中发生的事情之间的区别(为什么两者都需要呢?)

    投影矩阵负责将顶点的坐标转换为二维坐标系中的点(它将世界投影到虚拟胶片-视口)。投影矩阵仅指定相机的行为(例如:它是广角镜头,还是长焦镜头,还是完全正交的镜头,如建筑斜线图?)。

    它变得混乱的原因是,在一天结束时,你给OpenGL的顶点会被modelview矩阵相乘,然后再被投影矩阵相乘。也就是说,给定模型视图矩阵M、投影矩阵P和顶点v,顶点的最终坐标由P给出 M

    不过,在你说到这一点之前,让我给你一个很好的经验法则。在你习惯这两个矩阵之间的区别之前,只使用 glOrtho glFrustum 关于投影矩阵( gluPerspective glTranslate , glScale glRotate 等)属于您应该对modelview矩阵执行的操作。

        2
  •  4
  •   Greg S    14 年前

    http://www.opengl.org/resources/faq/technical/viewing.htm (尤其是第8.080节)。

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    // setup your projection matrix here, e.g. with glFrustum or gluPerspective
    glFrustum(...)
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(...) // with your gluLookAt parameters, of course
    glTranslatef(1.0, 0.0, 0.0);
    // your drawing code here
    

    只是澄清一下: gluLookAt