Учитывая эту установку:Используя матрицу проекции на GLKMatrixStack
GLKMatrixStackRef transformHierarchy = GLKMatrixStackCreate (kCFAllocatorDefault);
float aspect = (float)self.drawableWidth/(float)self.drawableHeight;
float fov = PI * 0.125;
float height = 10.0f;
float cameraOffset = -height/(2.0f * tanf (fov/2.0f));
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective (fov, aspect, 0.01f, 1000.0f);
GLKMatrix4 T = GLKMatrix4MakeTranslation (0.0f, 0.0f, cameraOffset);
Я бы ожидать, что эти два варианта, чтобы создать идентичную матрицу на вершине стека. Вариант А:
GLKMatrixStackLoadMatrix4 (transformHierarchy, projectionMatrix);
GLKMatrixStackTranslate (transformHierarchy, 0.0f, 0.0f, cameraOffset);
Вариант B:
GLKMatrixStackLoadMatrix4 (transformHierarchy, GLKMatrix4Multiply (projectionMatrix, T));
Вариант А дает мне черный экран:
3.351560 0.000000 0.000000 0.000000
0.000000 5.027339 0.000000 0.000000
0.000000 0.000000 -1.000020 25.117201
0.000000 0.000000 -1.000000 0.000000
Вариант В (иначе идентичную матрицу, но с ненулевым M44) дает я ожидаемый визуальный результат:
3.351560 0.000000 0.000000 0.000000
0.000000 5.027339 0.000000 0.000000
0.000000 0.000000 -1.000020 25.117201
0.000000 0.000000 -1.000000 25.136698
Итак, я нашел решение для своего черного экрана, но результат с использованием GLKMatrixStackTranslate()
меня удивляет. Я что-то упустил? Не считается ли хорошей практикой поместить проекционную + мировую матрицу в нижнюю часть стека (за которой последуют преобразования модели)?
UPDATE
Исправлена ошибка в моей cameraOffset математике и обновленный выход матрицы совпадают, хотя это не имеет никакого влияния на эту проблему, как описано. Кроме того, для ясности я перенес значения матрицы (копировать/вставлять из xcode, который представляет их в строчном порядке), до столбца-столбца (поскольку OpenGL интерпретирует их).
Также подана ошибка с Apple, чтобы узнать, является ли это ожидаемым поведением.