【问题标题】:Is there a way to smooth objects / models in swift 3?有没有办法在 swift 3 中平滑对象/模型?
【发布时间】:2017-11-04 15:17:59
【问题描述】:

我目前正在尝试使用 SCNGeometry 或 MDLMesh 快速平滑我的 obj 模型。

我发现官方文档显示有“subdivisionLevel”属性,用于在 SCNGeometry 中进行细分和平滑。但是,它没有按预期工作。

对于级别 = 1-2,显然没有任何变化

对于级别 = 3-5,仍然没有明显变化,但应用程序滞后

以下是我的实验和代码的截图,还有什么我可以尝试平滑的吗?

细分级别=0: http://imgur.com/7BM9wp6

细分级别=5: http://imgur.com/mipaYMP

(如您所见,锋利的腰部和手臂仍然存在)

代码:

//load obj
let path = Bundle.main.path(forResource: "model_longshirt", ofType: "obj")!
let fileUrl = URL(fileURLWithPath: path)
let asset = MDLAsset(url: fileUrl)
guard let object = asset.object(at: 0) as? MDLMesh else {
    fatalError("ERROR_FAILED_TO_GET_MESH_FROM_ASSET")
}

//load material
let scatteringFunction = MDLScatteringFunction()
let material = MDLMaterial(name: "baseMaterial2", scatteringFunction: scatteringFunction)
let texPath = Bundle.main.path(forResource: "model_LongSleeve_texture_3", ofType: "jpg")!
let texUrl = URL(fileURLWithPath: texPath)
let materialProperty = MDLMaterialProperty(name: "baseTexture2", semantic: MDLMaterialSemantic.baseColor, url: texUrl)
material.setProperty(materialProperty)

//attach to node
let scnGeometry = SCNGeometry(mdlMesh: object)
scnGeometry.subdivisionLevel = 5
objNode = SCNNode(geometry: scnGeometry)
objNode.geometry?.firstMaterial = scnMaterial

任何帮助或提示将不胜感激。谢谢。

【问题讨论】:

  • 我也面临同样的问题。你找到解决办法了吗?
  • 很遗憾没有,我终于加载了另一个更流畅的模型。
  • 我的感觉是 Scenekit 是做人脸法线计算而不是基于顶点的计算,这导致了这个问题。

标签: ios swift3 3d render


【解决方案1】:

如果您导入的网格具有不共享边的面,那么您会得到如屏幕截图所示的锐利折痕。

A    B     C   A    BC   D
+----+-----+   +----+----+
|    |     |   |    |    |
+----+-----+   +----+----+
D    E     F   E    FG   H

由于两个四边形共享一条边,左侧的网格将是平滑的,而右侧的网格则不会,因为两个四边形有自己的内部边缘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多