我正在尝试使用一个在 SceneKit 中创建类似画布的东西SCNBox
,UIImage
从一个表面“包裹”到与之相邻的其他四个表面上。
我目前能想到的唯一方法是将它们UIImage
分成五个单独的图像并将它们作为材料放在侧面,但我相信一定有更简单的方法。
任何人都可以在这里引导我朝着正确的方向前进吗?盒子将在与“正面”相对的一侧具有单独的纹理/材质。
我正在尝试使用一个在 SceneKit 中创建类似画布的东西SCNBox
,UIImage
从一个表面“包裹”到与之相邻的其他四个表面上。
我目前能想到的唯一方法是将它们UIImage
分成五个单独的图像并将它们作为材料放在侧面,但我相信一定有更简单的方法。
任何人都可以在这里引导我朝着正确的方向前进吗?盒子将在与“正面”相对的一侧具有单独的纹理/材质。
您可以使用, 的contentsTransform
属性SCNMaterialProperty
将图像中所需的纹理坐标调整为SCNBox
一些带有简化示例的解释:
你想跳过矩形1, 3, 7, 9
并用这个纹理覆盖你的立方体。为此,只需将边的大小从SCNBox
0 到 1 标准化,并使用它来设置contentsTransform
矩阵中的比例和变换。
在我的示例中,我有一个边相等的立方体 - 所以它将是整个纹理的第三部分。从纹理中获取5
矩形
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
. 结果你会得到
最简单的方法可能是使用匹配的纹理坐标创建自定义几何体+geometryWithSources:elements: