Настройка glFrustumf в OpenGL ES - PullRequest
1 голос
/ 17 марта 2009

У меня возникли проблемы с настройкой перспективы в OpenGL ES. У кого-нибудь есть советы? Мой орто-проект выглядел так: glOrthof (-8.0f, self.frame.size.width, -12.0f, self.frame.size.height, -8.0f, 20.0f);

Как я могу получить аналогичную настройку с glFrustumf?

Ответы [ 6 ]

1 голос
/ 16 апреля 2009

Я только что связался с проблемами проецирования в OpenGLES с iphone. Параметры для glfrustum в приведенном выше примере кода не работают (-8.0f, 20.f), они дают недопустимые ошибки параметров. zNear, кажется, «нужно» быть позитивным.

Просто хотел поделиться знаниями, так как я бился головой, пытаясь понять, почему изменение этих параметров никак не повлияло на рендер!

1 голос
/ 18 марта 2009

В OpenGL ES нет такой вещи, как gluLookAt, если предположить, что это касается iPhone и OpenGL ES. Как это реализовано?

Имейте в виду, что положение камеры (0,0,0) и ваш квадрат также находится на этой плоскости z. Если вы вызовете glLoadIdentity (), glTranslatef (0.0f, 0.0f, 0.0f) не внесет никаких изменений.

Возможно, вы могли бы рассмотреть возможность перемещения большей части установочной части в методе настройки. То есть: GlEnable звонки и настройка камеры. Убедитесь, что glMatrixMode используется для работы с проекцией или матрицей просмотра модели. Настройка может быть:

- (void) setupView {
  glViewport(0, 0, backingWidth, backingHeight);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  // think about the box where all the vertices are.
  glFrustum(-8.0f, 8.0f, -12.0f, 12.0f, -8.0f, 20.0f); 
  // .. all sort of glEnable
}

В drawView убедитесь, что ваши вершины находятся перед камерой, применив к ним некоторый перевод. Также есть цвета для вас вершин.

- (void) drawView {
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glTranslatef(0, 0, 5.0f); // move in front

  glVertexPointer(3, GL_FLOAT, 0, squareVertices);

  // maybe you want to attach colors to your vertices
  const GLubyte squareColors[] = {
            255, 255,   0, 255,
            0,   255, 255, 255,
            0,     0,   0,   0,
            255,   0, 255, 255,
  };
  glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
  glEnableClientState(GL_COLOR_ARRAY);

  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
  // .. some other loadidentity and translate and vertex pointer setup and draw
}

Ссылка на OpenGL ES также может быть полезна: http://www.khronos.org/opengles/sdk/1.1/docs/man/

1 голос
/ 17 марта 2009
    - (void)drawView {

    // Replace the implementation of this method to do your own custom drawing

    const GLfloat squareVertices[] = {
        -5.0f, -5.0f, 0.0f,
        5.0f,  -5.0f, 0.0f,
        -5.0f,  5.0f, 0.0f,
        5.0f,   5.0f, 0.0f,
    };

    [EAGLContext setCurrentContext:context];
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
    glViewport(0, 0, backingWidth, backingHeight);
    glEnable(GL_TEXTURE_2D);
    glEnableClientState(GL_VERTEX_ARRAY);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, 0.0f);
    //glOrthof(-8.0f, self.frame.size.width, -12.0f, self.frame.size.height, -8.0f, 20.0f);
    glEnable(GL_DEPTH_TEST);
    perspective(85, 480/320, 0.1,20);
    gluLookAt(0.0f, 0.0f, -5.0f,

              1.0f,  1.0f,  1.0f,

              1.0f,  1.0f,  1.0f);  
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glDepthMask(GL_TRUE);
    glEnable(GL_CULL_FACE);
    glClearDepthf(1.0f);
    glColor4f(0.0f, 0.0f, 1.0f, .90f);

    //glTranslatef(2.5f, 2.5f, 0.0f);
    glVertexPointer(3, GL_FLOAT, 0, squareVertices);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);



    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
    [context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
0 голосов
/ 16 апреля 2009

Хотя gluLookAt не является частью openGlEs, большинство людей просто берут источник и помещают его в свой проект. это не много кода. по крайней мере, это даст хороший пример того, что происходит с glFrustum.

0 голосов
/ 17 марта 2009

Не уверен, что ломалось в проекции, которую я создал из шаблона Apple XCode для приложения OpenGL ES, но вот отличный шаблон, который на самом деле работает для глубины и перспективы:

http://iphonedevelopment.blogspot.com/2008/12/updated-opengl-es-xcode-project.html

Спасибо schnaader за всю вашу помощь.

0 голосов
/ 17 марта 2009

Вот пост с функцией перспективы , использующей glFrustumf и как преобразовать в него вызов glOrthof, возможно, это поможет.

Обратите внимание, что вам, возможно, придется впоследствии вызвать glTranslatef для центрирования камеры.

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