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)
问题
- 有人知道我能做什么吗?
- 也许抵消不是可行的方法?
- 如何缩放图像?
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)
希望对您有所帮助!!!
我有一个立方体(圆形),想在它的一侧显示纹理。我可以通过以下方式访问那一侧的 material:
var tex1: SCNMaterial! = cube.geometry?.materialWithName("_1")!
然后我设置它的图像内容:
tex1.diffuse.contents = "cube1"
这看起来像这样:
这表明它确实有效,但白色部分不在中心
它应该是。 (我使用的图像中间有白色部分。)
我尝试使用偏移在表面上四处移动图像,我也想缩放它。我这样试过:
tex1.diffuse.contents.offset = SCNVector3Make(20, 0, 0)
这给了我错误:它说它不能分配那个表达式的结果。 (我也试过contentMode
,同样的错误,我想是因为这些是针对UI,而不是SCN)
问题
- 有人知道我能做什么吗?
- 也许抵消不是可行的方法?
- 如何缩放图像?
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)
希望对您有所帮助!!!