Como obter o CATransform3D das matrizes Projection e ModelView?

todos

Eu tenho um projeto para iphone que desenha um modelo 3D usando o OpenGL-ES para uma determinada matriz de visualização de modelo e matriz de projeção. Eu precisava substituir o modelo 3D pelo CALayer, então coloquei valores da matriz de visualização do modelo na estrutura CATransform3D e o atribuai alayer.transform. Funcionou bem, a camada estava visível e foi movida na tela conforme o esperado, mas depois de algum tempo percebi que o comportamento das minhas camadas não era suficientemente preciso e eu deveria levar em consideração a matriz de projeção. E então surgiu um problema: quando eu simplesmente concatenar duas matrizes, minha camada parece estranha (é muito pequena, cerca de 2 pixels, enquanto deveria ser cerca de 300, pois está muito distante) ou não é visível. Como posso resolver isso?

Aqui está o trecho de código:

- (void)adjustImageObjectWithUserInfo:(NSDictionary *)userInfo
{
    NSNumber *objectID = [userInfo objectForKey:kObjectIDKey];
    CALayer *layer = [self.imageLayers objectForKey:objectID];
    if (!layer) { return; }

    CATransform3D transform = CATransform3DIdentity;
    NSArray *modelViewMatrix = [userInfo objectForKey:kModelViewMatrixKey];

      // Get raw model view matrix;
    CGFloat *p = (CGFloat *)&transform;
    for (int i = 0; i < 16; ++i)
    {
        *p = [[modelViewMatrix objectAtIndex:i] floatValue];
        ++p;
    }

      // Rotate around +z for Pi/2 
    transform = CATransform3DConcat(transform, CATransform3DMakeRotation(M_PI_2, 0, 0, 1));

      // Project with projection matrix
    transform = CATransform3DConcat(transform, _projectionMatrix);

    layer.transform = transform; 
}

Qualquer ajuda será apreciada

questionAnswers(5)

yourAnswerToTheQuestion