SceneKit - 纹理未正确显示

时间:2015-04-21 18:45:37

标签: ios swift textures offset scenekit

我有一个立方体(圆形),并希望在其中一个上显示纹理。我可以通过以下方式访问该方面的材料:

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

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

tex1.diffuse.contents = "cube1"

这看起来像这样:

cube with texture

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

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

这给了我错误:它说它无法分配该表达式的结果。 (我也试过contentMode,同样的错误,我认为因为这些是用于UI,而不是SCN)

问题

  1. 有谁知道我能做什么?
  2. 也许抵消不是要走的路?
  3. 如何缩放图像?

2 个答案:

答案 0 :(得分:3)

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

但是,材质属性确实有contentsTransform选项。你看过那个吗?

答案 1 :(得分:0)

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

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

创建比例:

let scaleVal = SCNMatrix4MakeScale(1.5, 1.5, 1.5)

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

material.diffuse.contentsTransform = offsetVal

如果您只想设置Scale Property:

material.diffuse.contentsTransform = scaleVal

如果你想混合它们:

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

希望这有用!!!