iOS 在每一帧应用 CATransform3D
iOS Apply CATransform3D on every frame
我正在捕获视频输出的每一帧并通过处理它,我将一个 CALayer 添加到一个叠加层,它应该根据处理帧的结果进行转换。
那个CALayer基本上就知道怎么画箭头了。
如果我只是在它工作的每一帧上添加 CALayer,但如果我对其应用变换,它根本不会显示。
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
dispatch_async(dispatch_get_main_queue(), ^(void)
{
firstLayer.transform = CATransform3DMakeRotation(M_PI_2, 1, 0, 0);
[firstLayer setNeedsDisplay];
});
}
怎么了?如何使叠加层显示在每一帧上转换的图层?
您正在围绕 X 轴旋转您的图层 π/2 弧度 (90°),使您的图层看起来完全不可见,因为您正从侧面看它。
我假设您打算将它在 Z 轴上旋转 90°,您可以将此轴视为指向屏幕的 in/out。如果这是你想要做的,那么绕着这个轴旋转,像这样:
firstLayer.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1);
我正在捕获视频输出的每一帧并通过处理它,我将一个 CALayer 添加到一个叠加层,它应该根据处理帧的结果进行转换。
那个CALayer基本上就知道怎么画箭头了。 如果我只是在它工作的每一帧上添加 CALayer,但如果我对其应用变换,它根本不会显示。
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
dispatch_async(dispatch_get_main_queue(), ^(void)
{
firstLayer.transform = CATransform3DMakeRotation(M_PI_2, 1, 0, 0);
[firstLayer setNeedsDisplay];
});
}
怎么了?如何使叠加层显示在每一帧上转换的图层?
您正在围绕 X 轴旋转您的图层 π/2 弧度 (90°),使您的图层看起来完全不可见,因为您正从侧面看它。
我假设您打算将它在 Z 轴上旋转 90°,您可以将此轴视为指向屏幕的 in/out。如果这是你想要做的,那么绕着这个轴旋转,像这样:
firstLayer.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1);