ios – 在SceneKit中进行背面剔除

ios – 在SceneKit中进行背面剔除,第1张

概述我目前正在尝试在场景套件中设置一个旋转球.我创造了球,并为它应用了纹理. ballMaterial.diffuse.contents = UIImage(named: ballTexture)ballMaterial.doubleSided = trueballGeometry.materials = [ballMaterial] 目前的ballTexture是一个半透明的纹理,因为我希望看到 我目前正在尝试在场景套件中设置一个旋转球.我创造了球,并为它应用了纹理.

ballMaterial.diffuse.contents = UIImage(named: ballTexture)ballMaterial.doubleSIDed = trueballGeometry.materials = [ballMaterial]

目前的ballTexture是一个半透明的纹理,因为我希望看到背面滚动.

然而,我得到一些奇怪的剔除,即使doubleSIDed属性设置为true,也只显示一半背面多边形.

任何帮助将不胜感激,谢谢.

解决方法 发生这种情况是因为透明度的影响取决于绘制顺序. SceneKit不知道在面向正面之前绘制球体的背面多边形. (实际上,如果没有为每个帧重新组织GPU上的顶点缓冲区,它就无法真正做到这一点,这将对渲染性能产生巨大的影响.)

SCNSphere的顶点布局使其设置为地球上的纬度/长度网格:三角形沿着0°到360°的子午线顺序渲染,因此取决于球体相对于摄像机的方向,球体远端的面部将在较近的面部之前呈现.

要解决此问题,您需要直接或通过深度缓冲区强制渲染顺序.这是一种方法,使用内部表面的单独材料来说明差异.

// add two balls,one a child of the otherlet node = SCNNode(geometry: SCNSphere(radius: 1))let node2 = SCNNode(geometry: SCNSphere(radius: 1))scene.rootNode.addChildNode(node)node.addChildNode(node2)// cull back-facing polygons on the first ball// so we only see the outsIDelet mat1 = node.geometry!.firstMaterial!mat1.cullMode = .Backmat1.transparent.contents = bwCheckers// my "bwCheckers" uses black for transparent,white for opaquemat1.transparencyMode = .RGBZero// cull front-facing polygons on the second ball// so we only see the insIDelet mat2 = node2.geometry!.firstMaterial!mat2.cullMode = .Frontmat2.diffuse.contents = rgCheckers// sphere normals face outward,so to make the insIDe respond// to lighting,we need to invert themlet shader = "_geometry.normal *= -1.0;"mat2.shaderModifIErs = [SCNShaderModifIErEntryPointGeometry: shader]

(最后的着色器修改器位不是必需的 – 它只是使内部材质得到漫反射着色.您也可以使用不涉及法线或光照的材质属性,如发射,具体取决于您想要的外观.)

您也可以通过禁用writesToDepthBuffer使用具有双面材质的单个节点来执行此 *** 作,但这也可能导致与场景内容的其余部分进行不良交互 – 在这种情况下您可能还需要使用renderingOrder.

总结

以上是内存溢出为你收集整理的ios – 在SceneKit中进行背面剔除全部内容,希望文章能够帮你解决ios – 在SceneKit中进行背面剔除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1005677.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存