ios - 使用 subdivisionLevel 平滑 SCNGeometry
问题描述
我们正在开发一款类似于 iPhone 的 Animoji 应用的应用。我们创建了自己的 3d 模型,看起来非常漂亮,唯一的问题是模型的眼睛或鼻子周围有边缘不光滑。模型已在 Maya 3D 软件中准备好。
看截图
您可以看到眼睛周围和眉毛周围的粗糙边缘。
我们正在尝试以下代码来平滑这些边缘:
let node = self.childNodes[0]
let geometry = node.geometry
let verticies = self.change(geometry: geometry!)
geometry?.edgeCreasesSource = SCNGeometrySource(vertices: verticies)
geometry?.subdivisionLevel = 0
guard let element = geometry?.elements.first else {
return
}
//print(element.debugDescription)
geometry?.edgeCreasesElement = SCNGeometryElement(data: element.data, primitiveType: .line, primitiveCount: element.primitiveCount, bytesPerIndex: element.bytesPerIndex)
我们正在尝试设置 subdivisionLevel 以便可以平滑边缘。这是正确的方法吗?或者我们需要做其他事情来以编程方式修复这个问题。当我们在 Maya 中看到 3d Designer 时,它的边缘非常平滑。
解决方案
使用细分级别是平滑几何的正确方法。然而,在代码片段中,您没有设置任何高于 0 的细分级别。如果您使用少量对象,最好使用 SceneKit 编辑器并在属性检查器中设置细分级别。
推荐阅读
- go - Go net.DialUDP 自动选择环回接口
- c++ - 在 UNIX 系统中使用 DIR 查找文件的字节大小
- xml - 如何在lua中使用字符串find提取xml元素值
- java - 为什么HashSet的属性不允许重复?
- bash - 函数中的子shell`(别名;声明-f)`
- node.js - Lambda 长时间运行的任务被执行两次,没有错误
- vba - 使用 VBA for PowerPoint 在编辑框中填充文本
- javascript - 如何通过 2 个不同的链接以不同的方式显示网页?
- c# - 数组输出我没有输入的随机数
- python - 有什么方法可以在不更改 python 中的 dtype 的情况下转换数据框中的日期时间格式