【问题标题】:SceneKit: Geometry not visible behind semi-transparent texture. Box inside BoxSceneKit:几何图形在半透明纹理后面不可见。盒内盒
【发布时间】:2021-04-02 23:19:58
【问题描述】:

我在使用 SceneKit 时遇到了一个问题: 当我制作两个立方体,一个在另一个里面,其中一个有半透明纹理时,里面的立方体没有被绘制出来。

How it should be(scene created in XCode)

How actually is(I made a few pixels with alpha 0 to understand what needs to be seen)

编辑: 我发现了一个与搅拌机有关的问题,但与我的Link非常相似

【问题讨论】:

  • 你能告诉我们你的场景设置和立方体的代码吗?
  • @ZAY 带有纹理的框是从自定义几何体创建的 'SCNGeometry *geometry = [SCNGeometry geometryWithSources:@[vertexSource, normalSource, uvSource] elements:@[indicesElement]];'立方体边缘的红线是带有修改着色器的标准框,仅在边缘绘制场景配置'_sceneView.scene = scene; _sceneView.antialiasingMode = SCNAntialiasingModeNone; _sceneView.autoenablesDefaultLighting = 是; _sceneView.allowsCameraControl = 是; _sceneView.contentMode = UIViewContentModeScaleAspectFit;'
  • 它可能是您使用的着色器程序(SCNProgram),因为它将替换所有随场景套件提供的着色器。如果你想要在你的第一个示例图像中做的事情,你应该能够使用来自 scenekit 的标准着色器来做到这一点。尝试为两个立方体创建不同的材质,调整它们的光照模型,并为外部立方体设置 0.3 或 0.4 的透明度
  • 我终于找到了原因。这完全取决于添加立方体的顺序。如果先添加小的,一切都会正常工作,如果大的 - 小的将不会被看到。最大的问题是应用程序是一个 3D 编辑器,元素的顺序是由用户设置的。我会努力寻找解决办法。

标签: ios geometry scenekit blend scnmaterial


【解决方案1】:

对于那些会遇到和我一样的问题的人:它已经解决了,但还没有完全解决。

解决方案在于根据几何尺寸按渲染顺序进行计算。结果并不稳定,但总比没有好。

cubeDict[@"render_order"] = @((sizeX + inflateDouble) + (sizeY + inflateDouble) + (sizeZ + inflateDouble));

【讨论】:

    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 2016-02-20
    • 2015-02-23
    • 2016-12-23
    • 2021-08-10
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多