根据Apple的文档“要更新一次值,请使用键值编码:调用setValue:forKey:方法,提供着色器源代码中的统一名称作为键,并提供适当类型的数据作为值。” (取自SCNProgram Class Reference)。
然而,我无法让它发挥作用。
我有一个SCNMaterial子类,设置一个新的SCNProgram实例,加载顶点和片段着色器。我一直在使用handleBindingOfSymbol
设置自定义变量,例如
self.stringMaterial.handleBindingOfSymbol("waveAmplitude") {
programID, location, renderedNode, renderer in
glUniform1f(GLint(location), Float(self.amplitude))
}
这是正常的。
为了提高效率,我希望能够使用键值编码。但是如果我用
替换上面的代码self.stringMaterial.setValue(Float(self.amplitude), forKey: "waveAmplitude")
着色器中的统一值为0.0。
有没有人有这方面的经验? (我在MacOS上这样做,但我希望它在iOS上也一样。)