頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


SceneKitでシェーダーを適用したのに一部しか反映されない

Blenderで作成したオブジェクトをdaeファイルで出力→SceneKitで使おうとしたけどうまく認識できていない?って妙な不具合に悩んでいた。まあ同じような症状にはまる人もいないと思うけど、とりあえず書いておく。

Blenderでオブジェクト作成

↑Blenderではこんな形状。これで1つのオブジェクト。ボーンが設定されてるんだけど本筋には関係なかった。
これをdaeファイルで出力。

SceneKitでdaeファイルの表示

↑SceneKitで使う。ここまではいいんだけど、このオブジェクトにシェーダーを適用すると、、、

SCNNodeにシェーダー適用

↑片側しか適用されない?なんでや?

Xcodeでdaeファイル確認

↑もしかして二つのSCNNodeオブジェクトになってんの?と思い、Xcode上でオブジェクトの構成を確認しても1つのオブジェクトみたい。
いろいろ試したり、調べてたりしたんだけど、daeファイルの中身を見てたらマテリアルが二重に設定されてることに気付いた。

Blenderでのマテリアル設定

↑Blenderで確認すると確かに設定したつもりはないんだけど二つある。片方を削除してやったら、、、

SCNNodeにシェーダー適用(修正後)

↑いけた!そういうことだったのか。
確かに、コードでも最初のmaterialにだけシェーダを適用するように書いてたわ。
{
    SCNGeometry *geometry = node.geometry;
    SCNMaterial *material = geometry.firstMaterial;

    SCNProgram *program = [SCNProgram program];
    program.vertexFunctionName = @"myVertex";
    program.fragmentFunctionName = @"myFragment";
    material.program = program;
}

<< matplotlibでグラフを描こうとするとエラー  TopPage  SceneKitのHitTestにオプション付けたらなぜかうまくいった >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1117-e841b914




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad