Справочная информация:
Я пытаюсь изучать OpenGLES 2.0 для iPhone и был озадачен проектом шаблона, который Apple предоставляет в xCode.
В проекте по умолчанию отображается двухмерный квадрат, но я хочу поэкспериментировать с добавлением вершин с различной глубиной на оси z.
В проекте Apple OpenGL по умолчанию они рисуют двухмерный квадрат, используя только координаты x и y, переданные вершинному шейдеру.
Чтобы поэкспериментировать с размещением вершин в трехмерном пространстве, я добавил значение azк данным вершины в примере проекта.Затем я изменил параметр размера в методе glVertexAttribPointer с 2 на 3. Я изменил значения z на вершинах в надежде, что при запуске программы квадрат будет казаться наклоненным назад.
Проблема в том, что он все еще отображается в виде того же 2-го квадрата.Из моего чтения я полагаю, что это вызвано тем, что матрица проекции установлена на Ортогональный вместо Перспективы.
Вопрос:
Как изменить матрицу проекции с ОртогональнойПерспективы использования OpenGLES 2.0 в шаблоне Apple проекта OpenGL?
Я пробовал:
glMatrixMode (GL_PROJECTION);glLoadIdentity ();glFrustumf (-0,5, 0,5, -0,5, 0,5, 1, 10);
Но это не изменило результат.
Я также пытался добавить что-то подобное в программу вершинного шейдера:
mat4 projectionMatrix = {2,0 / 320,0, 0,0, 0,0, -1,0, 0,0, 2,0 / 480,0, 0,0, -1,0, 0,0, 0,0, -1,0, 0,0, 0,0, 0,0, 0,01.0};
gl_Position * = projectionMatrix;
Но это тоже не сработало.
Способ установки матрицы проекции, отличный для OpenGLES 2.0, которыйэто было для 1.0.Я думаю, может быть, то, что я пробую, несовместимо с 2.0.
Заранее спасибо.
Майк
Обновление
Спасибо за вашу помощь Джон.Я очень ценю это.Я попытался добавить буфер глубины на основе вашего предложения, добавив следующий код в метод createFramebuffer в моем представлении EAGL, но все еще без изменений.
// Create depth render buffer and allocate backing store.
glGenRenderbuffers(1, &depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
И если я добавлю следующий код в мой метод рендеринга:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustumf(-0.5, 0.5, -0.5, 0.5, 1, 10);
Xcode выдает исключение.Есть мысли?