用3D透视平铺图像

时间:2013-12-10 18:00:30

标签: ios animation 3d

我不太确定标题是否是我的问题。我将首先解释这个挑战,然后你可能会建议我是否做了一些根本错误的事情。

我正在创建一个iOS应用程序,它允许用户在房间内拖放地板和墙砖(仅限预先选择的房间图像),并且可以看到放置在房间时该瓷砖的外观。我有瓷砖图像和房间图像,我已经定义了相对于房间图像的热点(需要更换瓷砖)。

在我的房间模拟器视图中,我有一个UIImageView,它可以保存房间图像,并且该图像的某些部分是透明的。我还有更小的UIImageViews,我把它放在房间图像的顶部。

当用户在较小的图像视图上拖放图块图像时,我正在使用方法创建一个UIImage

[sourceImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile];

给我一​​个平铺图像,然后将该图像设置为较小图像视图的源。

这个逻辑正在起作用,但我没有达到预期的效果。如果用户将瓷砖放在地板上,则最终图像看起来像地板,墙壁在不同的平面上。请查看下面的图片

here

右边的视图有2张图片,透明的房间图片和现在看到地砖的小图片。

所以我的问题是,我可以用某种3D视角平铺图像吗?我担心我在3D变换方面不是那么好,而且3d矩阵对我来说似乎很有希望。

我想这个问题主要是因为我们正在查看合成图像的角度,地板图像应该平铺在那里。或者换句话说,房间背面的瓷砖尺寸应小于正面瓷砖的尺寸。我可能错了。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

有点晚了,但你需要的是" CIPerspectiveTile": https://developer.apple.com/library/mac/documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html#//apple_ref/doc/filter/ci/CIPerspectiveTile

您需要创建一个CIFilter,设置输入值(5 - 图像,4个透视点),然后创建一个CIImage,然后将该图像绘制出来。有各种方法可以做到这一点。你可以做一些简单的事情:

CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef tiledImage = [context createCGImageFromCIImage:myCIImageWithPerspective fromRect:boundingRect];