首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCNBox -将一个纹理映射到六个边中的五个

SCNBox -将一个纹理映射到六个边中的五个
EN

Stack Overflow用户
提问于 2020-11-13 22:07:42
回答 2查看 245关注 0票数 1

我试图在SceneKit中使用一个SCNBox创建类似于画布的东西,用一个UIImage从一个表面“包裹”起来,然后放到与它相邻的其他四个表面上。

我目前认为唯一能做到这一点的方法是将UIImage分割成五个单独的图像,并将它们作为材料放在侧面,但我相信肯定会有一个更简单的方法。

有人能把我引向正确的方向吗?盒子将有一个单独的纹理/材料在对面的“前面”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-25 06:42:02

您可以使用contentsTransform属性从SCNMaterialProperty,以调整需要的纹理坐标从您的图像到SCNBox

一些简单例子的解释:

假设您使用的是多维数据集,并且您的纹理如下所示

通过将其分割成矩形,您将拥有

您希望跳过矩形1, 3, 7, 9并用此纹理覆盖您的立方体。为此,只需将SCNBox中0到1之间的侧大小标准化,并使用它在contentsTransform矩阵中设置缩放和转换。

在我的例子中,我有一个具有相等边的立方体,所以它将是整个纹理的第三部分。用于从纹理中提取5矩形

代码语言:javascript
复制
let normalizedWidth = 1/3
let normilizedHeight = 1/3

let xOffset = 1 //skip 1,4,7 line
let yOffset = 1 //skip 1,2,3 line
let sideMaterial = SCNMaterial()
sideMaterial.diffuse.contents = textureImage
let scaleMatrix = SCNMatrix4MakeScale(normalizedWidth, normilizedHeight, 0.0)
sideMaterial.diffuse.contentsTransform = SCNMatrix4Translate(scaleMatrix, 
normalizedWidth * xOffset, yOffset * yOffset, 0.0)

您可以用配置好的材料填充5个边,最后一个边(背面)仅用颜色填充,并将它们设置为materials属性的SCNBox。在结果中你会

票数 1
EN

Stack Overflow用户

发布于 2020-11-23 16:55:34

最简单的方法可能是使用+geometryWithSources:elements:创建具有匹配纹理坐标的自定义几何。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64828643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档