2017-07-27 10 views
0

ノードのローカル軸(x> 0) - >緑に基づいてノードの色を再描画できるシンプルなシェーダがありますが、動作させる方法世界の座標に基づいています。SceneKit、ノードベースの世界座標に基づいて色をオーバーレイするシェーダ

(シーンからいくつかのポイントを変換し、シェーダに渡すことではない基づいて、可能なシェーダ)

Shader demo

vec4 pos = u_inverseModelTransform * u_inverseViewTransform * vec4(_surface.position, 1.0); 

if (pos.x > 0.0) { 
    _output.color.rgb = vec3(0.0, 0.8, 0.0); 
} 

答えて

0

あなたはワールド空間から戻ってあなたを移動するu_inverseModelTransformを掛けたくありませんオブジェクト空間。 「mnuages」正解への当然の結果として

vec4 pos = u_inverseViewTransform * vec4(_surface.position, 1.0); 
0

、私は最終的にあなたがMetalSLにいるといないGLSL場合はscn_frame.inverseViewTransformないu_inverseViewTransformを使用する必要があることを考え出しました。

SceneKitは自動的にGLSL shaderModifiersをMetalSLにクロスコンパイルしようとしますので、時にはどちらを使用しているのか分かりにくいので、これは難しいです。 (例えば、あなたはあなたのSceneKitビューをOpenGLまたはGLESの代わりにメタルバックすることができ、GLSLでシェーダ修飾子を書き込むことができ、SceneKitは機能します)

関連する問題