将向量数组传递给Scenekit着色器修改器

时间:2018-12-19 13:20:32

标签: ios swift shader scenekit

我当前正在尝试将SCNVector3数组发送到SceneKit着色器修改器。刚开始,似乎无法按照Apple's documentation on the data types的要求进行支持。但是我偶然发现this answer,它指出将数组作为数据Blob传递应该可以解决问题。

所以我尝试使用以下代码进行设置:

myArray = Array(myArray.suffix(10)) // Keep the last 10 values
let arrayData = Data(bytes: myArray, count: 10 * MemoryLayout<SCNVector3>.size)
material.setValue(arrayData, forKey: "myShaderArray")

以及(GLSL)着色器中:

uniform vec3 myShaderArray[10];

不幸的是,当我这样做时,这些值在着色器的一端似乎是完全错误的。我真的找不到一种方法可以检查着色器代码中的实际值,但是我已经通过静态传递所有值(使用多个统一和NSValue(scnVector3:))来确认我的数据是正确的,并且效果很好,除了在shader修改器中没有实际的数组。我怀疑此方法不能很好地传递数组,即使着色器可以编译和工作,但填充统一数组时数据的布局也不正确。将float3用作Swift端的类型也无济于事。

实际上是否可以将SCNVector3数组发送到着色器修改器?

0 个答案:

没有答案