Матрица проекции в проекте шаблона OpenGLES 2.0 от Apple для iPhoneIOS

Программируем под IOS
Ответить
Anonymous
 Матрица проекции в проекте шаблона OpenGLES 2.0 от Apple для iPhone

Сообщение Anonymous »

Справочная информация:
Я пытаюсь изучить OpenGLES 2.0 для iPhone и был озадачен проектом шаблона, который Apple предоставляет в xCode. >
Проект по умолчанию показывает 2D-квадрат, но я хочу поэкспериментировать с добавлением вершин различной глубины по оси Z.
В проекте Apple OpenGL по умолчанию они нарисуйте 2D-квадрат, используя только Координаты x и y передаются в вершинный шейдер.
Чтобы поэкспериментировать с размещением вершин в трехмерном пространстве, я добавил значение z к данным вершин в примере проекта. Затем я изменил параметр размера в методе glVertexAttribPointer с 2 на 3. Я изменил значения z на вершинах в надежде, что это приведет к тому, что квадрат будет казаться наклоненным назад при запуске программы.
Проблема в том, что он по-прежнему отображается как тот же 2D-квадрат. Судя по моему прочтению, я считаю, что это вызвано тем, что для матрицы проекции установлено значение "Ортографическая", а не "Перспектива".
Вопрос:
Как изменить матрицу проекции с ортогональной на перспективную с помощью OpenGLES 2.0 в шаблонном проекте OpenGL от Apple?
Я пробовал:

Код: Выделить всё

 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.0, 1.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 генерирует исключение. Есть мысли?

Подробнее здесь: https://stackoverflow.com/questions/449 ... te-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»