我有一个立方体(圆形),并希望在其中一个上显示纹理。我可以通过以下方式访问该方面的材料:
var tex1: SCNMaterial! = cube.geometry?.materialWithName("_1")!
然后我设置它的图像内容:
tex1.diffuse.contents = "cube1"
这看起来像这样:
这告诉我它确实有效,但白色部分不在中心
它应该是。 (我使用的图像中间有白色部分。)
我试图使用偏移来在表面上移动图像,我也想缩放它。我试过这样的话:
tex1.diffuse.contents.offset = SCNVector3Make(20, 0, 0)
这给了我错误:它说它无法分配该表达式的结果。 (我也试过contentMode
,同样的错误,我认为因为这些是用于UI,而不是SCN)
问题
答案 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)
希望这有用!!!