2016-08-15 50 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) 

我会离开,在那里,但希望有人会有一个真正的答案!