如何在iPad中设置glFrustumf

如何在iPad中设置glFrustumf,ipad,Ipad,在这里,我创建了一个简单的OpenGLES iPad示例 //---------------------------------------- glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustumf(-1, 1, -1, 1, 0, 20); glMatrixMode(GL_MODELVIEW); static const GLfloat squareVertices[] = { -0.5f, -0.33f,1.6,

在这里,我创建了一个简单的OpenGLES iPad示例

//----------------------------------------
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glFrustumf(-1, 1, -1, 1, 0, 20);
glMatrixMode(GL_MODELVIEW);

 static const GLfloat squareVertices[] = {
    -0.5f,  -0.33f,1.6,
     0.5f,  -0.33f,1.6,
    -0.5f,   0.33f,1.6,
     0.5f,   0.33f,1.6
 };

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
. . .  . . . .
. . .  . . . .
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

//----------------------------------------
我在mac示例中使用了gluLookAt,但在iPad中找不到它。上面代码中的基本错误是什么?为什么正方形不可见

若我更改顶点数组中的z值,那个么效果很好

  static const GLfloat squareVertices[] = {
    -0.5f,  -0.33f,0.5,
     0.5f,  -0.33f,0.5,
    -0.5f,   0.33f,0.5,
     0.5f,   0.33f,0.5
  };

我认为z值的范围应该是0-20,这里是1.6,在范围内。我现在不想更改顶点值。请帮助我设置GLFRUSTOMF。

传递给GLFRUSTOM的近距离值和远距离值不是对象空间中的绝对坐标。它们是从摄影机到近平面和远平面的距离。这意味着你不能说一个1.6的z坐标一定在你的平截头体中,除非你知道相机的位置和它指向的方向

例如,如果您的相机位于(0,0,-19)并指向原点,并且将0和20传递给glFrustum进行“近”和“远”,则在对象空间中,近平面位于-19(-19+0),远平面位于1(-19+20)。在这种情况下,z=1.6的正方形将穿过远平面,但z=0.5的正方形将位于平截头体内部。类似地,如果您的相机位于(0,0,1),且glFrustum的值相同,则在对象空间中,近平面将位于1,远平面将位于-19,因此0.5将为in,1.6将为out