Я пытаюсь передать GLKVector4
шейдеру, который должен получить его как vec4
. Я использую фрагмент шейдеров модификатор:SceneKit передает единый вектор модификаторам шейдера
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)). То же самое происходит, если я заменю GLKVector4
по SCNVector4
После 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")
и это приведет к увеличению зеленого канала за исключением
оборачивать в 'Структуры NSValue' для перехода к API, которые принимают объекты артефакт ObjC. В настоящее время Swift предоставляет некоторые автоматические мосты, но не для всех (и обычно не для типов, предоставляемых инфраструктурами более высокого уровня, такими как SceneKit). Похоже, [что может измениться, хотя] (https://github.com/apple/swift-evolution/blob/master/proposals/0139-bridge-nsnumber-and-nsvalue.md) ... – rickster
Очень интересно читать , Я как-то пожелал, чтобы SceneKit не слишком полагался на Swift, обрабатывая эти вещи, и вместо этого определял функции 'setValue', которые имеют смысл, например' set (значение: Float, для ключа: String) ',' set (значение: SCNVector4 .. .) 'и т. д. и, следовательно, выявить все другие вещи, которые в любом случае не будут переданы в программу шейдеров, вместо того, чтобы принимать вход типа« Любой » – Guig
Это [может быть хорошая обратная связь для отправки в Apple] (http: // bugreport .apple.com). – rickster