gpt4 book ai didi

swift - SceneKit 将统一向量传递给着色器修改器

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:34 24 4
gpt4 key购买 nike

我正在尝试将 GLKVector4 传递给应该将其作为 vec4 接收的着色器。我正在使用片段着色器修改器:

material.shaderModifiers = [ SCNShaderModifierEntryPoint.fragment: shaderModifier ]

shaderModifier 是:

// color changes
uniform float colorModifier;
uniform vec4 colorOffset;

vec4 color = _output.color;

color = color + colorOffset;
color = color + vec4(0.0, colorModifier, 0.0, 0.0);

_output.color = color;

(我只是添加颜色偏移)我试过:

material.setValue(GLKVector4(v: (250.0, 0.0, 0.0, 0.0)), "colorOffset")

这是行不通的(没有添加偏移量,着色器使用默认值 (0, 0, 0, 0))。如果我用 SCNVector4

替换 GLKVector4 也会发生同样的情况

正在关注 this我也试过:

let points: [float2] = [float2(250.0), float2(0.0), float2(0.0), float2(0.0)]
material.setValue(NSData(bytes: points, length: points.count * sizeof(float2)), "colorOffset")

但是,我可以通过以下操作轻松地将浮点值传递给统一的 colorModifier:

material.setValue(250.0, forKey: "colorModifier")

这将增加绿色 channel 的异常(exception)情况

最佳答案

所以你必须使用 NSValue,它对 SCNVector4 有一个方便的初始化,所以:

let v = SCNVector4(x: 250.0, y: 0.0, z: 0.0, w: 0.0)
material.setValue(NSValue(scnVector4: v), "colorOffset")

如果 SceneKit 可以直接处理它自己的类型就太好了......

关于swift - SceneKit 将统一向量传递给着色器修改器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401696/

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