有没有办法在swift 3中平滑对象/模型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在swift 3中平滑对象/模型?相关的知识,希望对你有一定的参考价值。

我目前正试图在swift中平滑我的obj模型,无论是使用SCNGeometry还是MDLMesh都适用。

我找到了官方文档,显示有“subdivisionLevel”属性,用于SCNGeometry中的细分和平滑。但是,它没有按预期工作。

对于等级= 1-2,没有任何明显变化

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

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

subdivisionLevel = 0:http://imgur.com/7BM9wp6

subdivisionLevel = 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

任何帮助或提示都将是值得赞赏的。谢谢。

答案

如果导入的网格物体具有不共享边缘的面,那么您将获得截图中的锐利折痕。

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

左边的网格将是平滑的,因为两个四边形共享边缘,右边的网格不会,因为两个四边形有自己的内边缘。

以上是关于有没有办法在swift 3中平滑对象/模型?的主要内容,如果未能解决你的问题,请参考以下文章

无法在iOS 11 Swift中平滑地展开文本视图

在 Swift 中平滑扩展 UIView 动画

如何在 Java 中平滑 JFrame 的滚动

ZBrush中平滑笔刷介绍

Three.js在函数中平滑旋转一个对象

在 OpenGL 中平滑面部边缘的技术