我不太确定标题是否是我的问题。我会首先解释这个挑战,然后你可能可以建议我是否做了一些根本错误的事情。
我正在创建一个 iOS 应用程序,它允许用户将地板和墙砖拖放到房间上(仅限预先选择的房间图像),并且可以看到该瓷砖放置在房间上时的外观。我有瓷砖图像和房间图像,并且我已经定义了相对于房间图像的热点(需要更换瓷砖的地方)。
在我的房间模拟器视图中,我有一个 UIImageView,它保存房间图像,并且该图像的某些部分变得透明。我还有较小的 UIImageView,我将其放在房间图像的顶部。
当用户将平铺图像拖放到较小的图像视图上时,我正在使用该方法创建 UIImage
[sourceImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile];
这给了我一个平铺图像,然后该图像被设置为较小图像视图的源。
这个逻辑有效,但我没有达到预期的效果。如果用户将瓷砖放在地板上,则最终图像看起来地板和墙壁位于不同的平面上。请查看下面的图片
右侧的视图有 2 个图像,一个是具有透明度的房间图像,另一个是您现在看到地砖的较小图像。
所以我的问题是,我可以用某种 3D 视角平铺图像吗?恐怕我不太擅长 3D 变换,而且 3D 矩阵对我来说看起来很希腊语。
我想问题主要是因为我们查看结果图像的角度,并且地砖图像应该在平铺时考虑到这一点。或者换句话说,房间背面的瓷砖尺寸应该小于正面的瓷砖尺寸。我可能错了。
任何帮助将不胜感激。
有点晚了,但你需要的是“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];
我陷入了同样的事情,但使用了不同的软件,如果你有任何解决方案,请告诉我