相关疑难解决方法(0)

如何从Projection和ModelView矩阵中获取CATransform3D?

所有,

我有一个iphone项目,使用OpenGL-ES为给定的模型视图矩阵和给定的投影矩阵绘制3D模型.我需要用CALayer替换3D模型,所以我将模型视图矩阵的值放入CATransform3D结构并分配给它layer.transform.它运作良好,图层可见并按预期在屏幕上移动,但过了一段时间后我意识到我的图层行为不够精确,我应该考虑投影矩阵.然后出现了一个问题:当我简单地连接两个矩阵时,我的图层看起来很奇怪(它非常小,大约2个像素,而它应该是大约300个,因为它距离很远)或根本不可见.我该如何解决?

这是一段代码:

- (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 …
Run Code Online (Sandbox Code Playgroud)

3d opengl-es calayer catransform3d projection-matrix

6
推荐指数
2
解决办法
3531
查看次数