Ich versuche, Shader Modifier mit Metall zu verwenden. Ich kann keine Uniformen zu erklären, herauszufinden, ... So weit mein Fragment Modifikator:SCN Shader Modifier in Metall - pass uniform zu Shader
// color changes
#pragma arguments
float4x4 u_color_transformation;
#pragma body
_output.color.rgb = vec3(1.0) - (u_color_transformation * _output.color).rgb;
Dies gibt eine lilae Textur, ohne lügt .. Wenn ich nur _output.color.rgb = (u_color_transformation * _output.color).rgb
, sind die Dinge in Ordnung. Ich denke ich folge dem doc aber vielleicht nicht!
ist die einheitliche Satz mit:
material.shaderModifiers =
[ SCNShaderModifierEntryPoint.fragment: theShaderAbove ]
material.setValue(NSValue(mat4: GLKMatrix4Identity), forKey: "u_color_transformation")
dies war die Arbeit mit openGL fein All
Update:
SceneKit Shader-Modifikatoren GLSL-Code verwendet Offenbar, und kümmert sich um sie von der Umstellung auf Metall. Also änderte ich den Shader:
// color changes
#pragma arguments
uniform mat4 u_color_transformation;
#pragma body
_output.color.rgb = vec3(1.0) - (u_color_transformation * _output.color).rgb;
Der Ausgang jetzt weiß ist (was darauf hindeutet, dass es zumindest kompiliert), was darauf hindeutet, dass u_color_transformation
nicht an den Shader übergeben wird, und wird auf eine Nullmatrix im Shader aufgelöst, die gibt Schwarz, das, einmal invertiert, weiß ist.