2014-01-20 3 views
2

Учитывая эту установку:Используя матрицу проекции на 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, чтобы узнать, является ли это ожидаемым поведением.

ответ

0

Для записи Apple определила мой отчет об ошибке в этой проблеме как дубликат ошибки 15419952. Я ожидаю, что люди не столкнутся с этим так сильно, как обычно, они могут удерживать матрицу проекции отдельно от стека трансформации модели. В любом случае обходной путь, представленный в вопросе, работает нормально.