Как установить glFrustumf в iPad - PullRequest
0 голосов
/ 28 июля 2011

Здесь я создал один простой образец 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);

//----------------------------------------

Я использовал gluLookAt в образце Mac, но в 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, это в диапазоне. Я не люблю менять значение вершины сейчас. Помогите мне установить glFrustumf. ​​

1 Ответ

1 голос
/ 11 марта 2012

Ближайшие и дальние значения, передаваемые glFrustum, не являются абсолютными координатами в пространстве объектов. Это расстояния от камеры до ближних и дальних плоскостей. Это означает, что вы не можете сказать, что координата z, равная 1,6, обязательно находится в вашем усеченном контуре, если вы не знаете, где находится камера и в каком направлении она указывает.

Например, если ваша камера в точке (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 было бы внутри, а 1,6 - вне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...