相关疑难解决方法(0)

SceneKit将统一矢量传递给着色器修改器

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

material.shaderModifiers = [ SCNShaderModifierEntryPoint.fragment: shaderModifier ]
Run Code Online (Sandbox Code Playgroud)

在哪里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;
Run Code Online (Sandbox Code Playgroud)

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

material.setValue(GLKVector4(v: (250.0, 0.0, 0.0, 0.0)), "colorOffset")
Run Code Online (Sandbox Code Playgroud)

这不起作用(不添加偏移,并且着色器使用默认值(0,0,0,0))。如果我替换为GLKVector4,也会发生同样的情况SCNVector4

之后,我也尝试过:

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")
Run Code Online (Sandbox Code Playgroud)

但是,我可以通过以下操作colorModifier轻松地将float值传递给统一变量:

material.setValue(250.0, forKey: "colorModifier")
Run Code Online (Sandbox Code Playgroud)

这将增加绿色通道的例外

shader scenekit swift

5
推荐指数
1
解决办法
1213
查看次数

标签 统计

scenekit ×1

shader ×1

swift ×1