SceneKit - 纹理显示不正确

SceneKit - Textures not properly displayed

我有一个立方体(圆形),想在它的一侧显示纹理。我可以通过以下方式访问那一侧的 material:

var tex1: SCNMaterial! = cube.geometry?.materialWithName("_1")!

然后我设置它的图像内容:

tex1.diffuse.contents = "cube1"

这看起来像这样:

这表明它确实有效,但白色部分不在中心 它应该是。 (我使用的图像中间有白色部分。)
我尝试使用偏移在表面上四处移动图像,我也想缩放它。我这样试过:

tex1.diffuse.contents.offset = SCNVector3Make(20, 0, 0)

这给了我错误:它说它不能分配那个表达式的结果。 (我也试过contentMode,同样的错误,我想是因为这些是针对UI,而不是SCN)

问题

  1. 有人知道我能做什么吗?
  2. 也许抵消不是可行的方法?
  3. 如何缩放图像?

material属性的contents的类型是AnyObject,这意味着编译器将允许你调用任何方法(定义在任何对象类型上) 在上面。这并不意味着所有方法或 属性 访问器实际上都是由您的特定 contents 中的实际 class 实现的。

不过,

Material 属性确实有一个 contentsTransform 选项。你看过了吗?

这是我的解决方案: 创建偏移量:

let offsetVal =  SCNMatrix4MakeTranslation(0, -0.05, 0)

创建规模:

let scaleVal = SCNMatrix4MakeScale(1.5, 1.5, 1.5)

如果您只想设置偏移 属性:

material.diffuse.contentsTransform = offsetVal

如果您只想设置比例 属性:

material.diffuse.contentsTransform = scaleVal

如果你想混合它们:

material.diffuse.contentsTransform = SCNMatrix4Mult(scaleVal, offsetVal)

希望对您有所帮助!!!