[英]SceneKit - Textures not properly displayed
我有一個立方體(圓形),並希望在其中一個上顯示紋理。 我可以通過以下方式訪問該方面的材料:
var tex1: SCNMaterial! = cube.geometry?.materialWithName("_1")!
然后我設置它的圖像內容:
tex1.diffuse.contents = "cube1"
這看起來像這樣:
這告訴我它確實有效,但白色部分不應該在中心。 (我使用的圖像中間有白色部分。)
我試圖使用偏移來在表面上移動圖像,我也想縮放它。 我試過這樣的:
tex1.diffuse.contents.offset = SCNVector3Make(20, 0, 0)
這給了我錯誤:它說它無法分配該表達式的結果。 (我也嘗試過contentMode
,同樣的錯誤,我認為因為這些是用於UI,而不是SCN)
問題
材質屬性的contents
是AnyObject
,這意味着編譯器將允許您在其上調用任何方法(在任何對象類型上定義)。 這並不意味着所有方法或屬性訪問器實際上都是由特定contents
的實際類實現的。
但是,材質屬性確實有一個contentsTransform
選項。 你看過那個嗎?
這是我的解決方案:創建偏移量:
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)
希望這有用!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.