以下代码在SCNView
中生成一个红框。但是,边缘沿着朝向您的侧面/元件的顶部和底部呈锯齿状(如附件所示)。我们的目标是渲染与Minecraft盒子类似的更平滑的边缘。改变摄像头的位置会减少某些边缘的像素化,所以这是一个摄像头角度问题?如果是的话,无论摄像机角度是否可以渲染边缘平滑的盒子?创建更平滑的边缘或以其他方式修复SCNView中的盒子上的锯齿边缘?
例如,将摄像头位置设置为SCNVector3(x: 0.0, y: 0.0, z: 10.0)
可有效呈现箱子的2D和清晰的边缘(第二个附件)。
let sceneView = SCNView(frame: self.view.frame)
self.view.addSubview(sceneView)
let scene = SCNScene()
sceneView.scene = scene
let camera = SCNCamera()
let cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3(x: -3.0, y: 0.0, z: 10.0)
let ambientLight = SCNLight()
ambientLight.type = SCNLightTypeAmbient
ambientLight.color = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1.0)
cameraNode.light = ambientLight
let light = SCNLight()
light.type = SCNLightTypeOmni
let lightNode = SCNNode()
lightNode.light = light
lightNode.position = SCNVector3(x: 0, y: 20, z: 10)
let cubeGeometry = SCNBox(width: 3.0, height: 3.0, length: 3.0, chamferRadius: 0.0)
let cubeNode = SCNNode(geometry: cubeGeometry)
let planeGeometry = SCNPlane(width: 100.0, height: 100.0)
let planeNode = SCNNode(geometry: planeGeometry)
planeNode.eulerAngles = SCNVector3(x: GLKMathDegreesToRadians(-90), y: 0, z: 0)
planeNode.position = SCNVector3(x: 0, y: -0.5, z: 0)
let redMaterial = SCNMaterial()
redMaterial.diffuse.contents = UIColor.redColor()
cubeGeometry.materials = [redMaterial]
let greenMaterial = SCNMaterial()
greenMaterial.diffuse.contents = UIColor.greenColor()
planeGeometry.materials = [greenMaterial]
let constraint = SCNLookAtConstraint(target: cubeNode)
constraint.gimbalLockEnabled = true
cameraNode.constraints = [constraint]
lightNode.constraints = [constraint]
scene.rootNode.addChildNode(lightNode)
scene.rootNode.addChildNode(cameraNode)
scene.rootNode.addChildNode(cubeNode)
scene.rootNode.addChildNode(planeNode)
你试过'antialiasingMode'吗? – jtbandes
@jtbandes谢谢,使用'.Multisampling4X'对边缘进行了一些平滑处理,但它们仍然明显模糊不平。其他建议? – Crashalot
看起来是特定于iOS的。我在iOS和OS X操场上运行了这段代码。 OS X版本没有锯齿,即使没有启用多重采样。它在真正的iOS硬件上看起来如何? –