使用 3D 透视平铺图像

问题描述 投票:0回答:2

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

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

在我的房间模拟器视图中,我有一个 UIImageView,它保存房间图像,并且该图像的某些部分变得透明。我还有较小的 UIImageView,我将其放在房间图像的顶部。

当用户将平铺图像拖放到较小的图像视图上时,我正在使用该方法创建 UIImage

[sourceImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile];

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

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

here

右侧的视图有 2 个图像,一个是具有透明度的房间图像,另一个是您现在看到地砖的较小图像。

所以我的问题是,我可以用某种 3D 视角平铺图像吗?恐怕我不太擅长 3D 变换,而且 3D 矩阵对我来说看起来很希腊语。

我想问题主要是因为我们查看结果图像的角度,并且地砖图像应该在平铺时考虑到这一点。或者换句话说,房间背面的瓷砖尺寸应该小于正面的瓷砖尺寸。我可能错了。

任何帮助将不胜感激。

ios animation 3d
2个回答
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];

0
投票

我陷入了同样的事情,但使用了不同的软件,如果你有任何解决方案,请告诉我

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.