gpt4 book ai didi

ios - 是否可以将 float 组传递给 iOS SceneKit 顶点着色器修改器?

转载 作者:行者123 更新时间:2023-11-28 12:30:55 24 4
gpt4 key购买 nike

我在 iOS 上使用 SceneKit。在 OpenGL ES 顶点着色器中,我正在尝试读取以下制服:

uniform float floats[8];

我将我的数组传递给顶点着色器修改器,使用 Swift 中的以下调用:

let floats = [10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0]
material.setValue(NSArray(array: floats), forKey: "floats")

但是,无论我做什么,制服似乎都只是初始化为一个零数组。

是否支持将数组传递给着色器修改器?如果是这样,正确的语法是什么?

最佳答案

不,不支持将 NSArray 传递给 uniform,基于 SCNShadable 中的此表手册:

enter image description here

但你可以使用两个 vec4 (SCNVector4)mat4 (CATransform3D),但记得将它们包裹在 NSValue 中。

另一种方法是尝试这样的事情:

let vec1 = SCNVector4(x: 10.0, y: 20.0, z: 30.0, w: 40.0)
let vec2 = SCNVector4(x: 50.0, y: 60.0, z: 70.0, w: 80.0)
let unival = NSValue(bytes: [vec1, vec2], objCType: "[2{SCNVector4=ffff}]")
material.setValue(unival, forKey: "floats")

这利用了type encoding NSValueinit(bytes:objCType:) ,理论上应该只要值被正确编码就可以工作。

关于ios - 是否可以将 float 组传递给 iOS SceneKit 顶点着色器修改器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42109613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com