2016-08-15 53 views
1

我在立方體上顯示一個紋理(請參閱SceneKit - Map cube texture to box) 現在情況很好,但結果顯示了我在此處列出的一些立方體表面之間的輕微縫合線(您在立方體內):SceneKit - 刪除邊框中的縫合線

enter image description here

任何想法如何,我可以擺脫嗎?輸入質地看上去像

enter image description here

所以在輸入一些不連續性。我使用的是一個自定義的SceneKit幾何,並不比將此紋理映射到多維數據集更多。你可以找到問題上面提到的相關代碼:https://stackoverflow.com/a/38961244/2054629

回答

0

作爲一個哈克解決方案,我已經改變了立方體的形狀稍微不立方米,而更像enter image description here

使邊緣消失(假設相機在裏面)。紋理被裁剪了一點,但是這不太明顯。

我用來定義3×8個頂點作爲位置:

let _positions = [ 
    SCNVector3(x:-halfSide, y:-halfSide, z: halfSide), 
    SCNVector3(x: halfSide, y:-halfSide, z: halfSide), 
    SCNVector3(x:-halfSide, y:-halfSide, z: -halfSide), 
    SCNVector3(x: halfSide, y:-halfSide, z: -halfSide), 
    SCNVector3(x:-halfSide, y: halfSide, z: halfSide), 
    SCNVector3(x: halfSide, y: halfSide, z: halfSide), 
    SCNVector3(x:-halfSide, y: halfSide, z: -halfSide), 
    SCNVector3(x: halfSide, y: halfSide, z: -halfSide), 
] 
let positions = _positions + _positions + _positions 

,現在我通過替換最後一行:

let X = 0 
let Y = 8 
let Z = 16 
func killEdgeStitching(positions: [SCNVector3], axis: Int) -> [SCNVector3] { 
    var res = [SCNVector3]() 
    let delta = Float(0.99) 
    for pos in positions { 
     var newPosition = SCNVector3(x: pos.x, y: pos.y, z: pos.z) 
     switch axis { 
     case X: 
      newPosition.x *= delta 
     case Y: 
      newPosition.y *= delta 
     default: 
      newPosition.z *= delta 
     } 
     res.append(newPosition) 
    } 
    return res 
} 
let positions = killEdgeStitching(positions: _positions, axis: X) + 
    killEdgeStitching(positions: _positions, axis: Y) + 
    killEdgeStitching(positions: _positions, axis: Z) 

我會離開,在那裏,但希望有人會有一個真正的答案!