SceneKit绘制的线条被像素化

时间:2019-04-12 11:50:20

标签: ios swift macos scenekit

我正在尝试使用适用于macOS和iOS的SceneKit创建3d网格。我使用以下方法:

func test(gridSize: Float, gridCount: Int, bold: Int) {
    let gridLen = gridSize * Float(gridCount)
    var vectors = [
        SCNVector3(0, 0, gridLen),
        SCNVector3(0, 0, -gridLen),
        SCNVector3(gridLen, 0, 0),
        SCNVector3(-gridLen, 0, 0)
    ]

    for grid in 1...gridCount {
        vectors += [
            SCNVector3(Float(grid) * gridSize, 0, gridLen),
            SCNVector3(Float(grid) * gridSize, 0, -gridLen),
            SCNVector3(Float(-grid) * gridSize, 0, gridLen),
            SCNVector3(Float(-grid) * gridSize, 0, -gridLen),
            SCNVector3(gridLen, 0, Float(grid) * gridSize),
            SCNVector3(-gridLen, 0, Float(grid) * gridSize),
            SCNVector3(gridLen, 0, Float(-grid) * gridSize),
            SCNVector3(-gridLen, 0, Float(-grid) * gridSize)
        ]
    }

    let indices: [Int32] = vectors.enumerated().map{Int32($0.0)}

    let source = SCNGeometrySource(vertices: vectors)
    let element = SCNGeometryElement(indices: indices, primitiveType: .line)

    self.geometry = SCNGeometry(sources: [source], elements: [element])
}

并使用以下命令调用它:

class EditorGrid: SCNNode {
    override public init() {
        super.init()

        self.test(gridSize: 0.5, gridCount: 10, bold: 5);
    }
    // ...
}

我确实在macOS应用中绘制了网格。但是,网格的确非常复杂:

Pixeled Grid

当我使用SceneKit的内置相机处理程序功能时,您会注意到,即使放大到网格,像素也会变色:

Zoomed Pixled Grid

此外,当我真正放大时,网格的下半部分会被裁剪,这与预期的行为不同: Cropped zoom grid

将其与标准3d软件网格进行比较: standard 3d grid 您会注意到在此示例中线条没有像素化。

此外,当真正放大时,您会注意到相机没有被裁剪: Good behaviour zoom

我想知道我为得到这样的结果做错了什么。我希望获得一些重点帮助,以便我解决问题! 谢谢!

0 个答案:

没有答案