2016-09-16 3 views
3

シェーダモディファイアをMetalで使用しようとしています。私はちょうど_output.color.rgb = (u_color_transformation * _output.color).rgbを持っている場合は、物事はOKです。..SCN shaderモディファイアをシェーダに一貫して渡します。

// color changes 
#pragma arguments 
float4x4 u_color_transformation; 

#pragma body 
_output.color.rgb = vec3(1.0) - (u_color_transformation * _output.color).rgb; 

これはノーログで、紫色のテクスチャを出力します。私はこれまでのところ、私のフラグメント修飾子がある...制服を宣言するために把握することはできません。私はdocに従っていると思いますが、おそらくそうではありません!

均一にして設定されている:どうやら

、SceneKitシェーダ修飾子は、GLSLコードを使用し、それを変換するの世話をする:

material.shaderModifiers = 
     [ SCNShaderModifierEntryPoint.fragment: theShaderAbove ] 

material.setValue(NSValue(mat4: GLKMatrix4Identity), forKey: "u_color_transformation") 

このすべては、OpenGL

アップデートと罰金働いていました金属。だから私はにシェーダを変更:出力はu_color_transformationがシェーダに渡されていないことを示唆している、(少なくともそれがコンパイルされていることを示唆している)今白で、シェーダでヌル行列に解決され

// color changes 
#pragma arguments 
uniform mat4 u_color_transformation; 

#pragma body 
_output.color.rgb = vec3(1.0) - (u_color_transformation * _output.color).rgb; 

ました一度反転すると、白くなる黒を与える。

答えて

2

あなたのシェイダーボディにvec3(1.0)があったので、SceneKitはglslを使用していると想定していました。それをfloat3(1.0)に変更した場合、metalを使用し、uniformキーワードなしで作業します。

関連する問題