我有一个使用OpenGL-ES绘制3D模型的iPhone项目,需要根据给定的模型视图矩阵和投影矩阵。现在我需要用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 = CATransform3DConcat(transform, _projectionMatrix);
layer.transform = transform;
}
任何帮助都将不胜感激。
CATransform3D
,并附加到CATransformLayer
上。 - Tony Arnold