SceneKit日和(3)

どうも、吉村です。

もう3回目です。
前回と前々回では、低レベルなAPIを通じて、SceneKitの世界へ旅立ちました。
なので今回は高レベルAPIを使って、より大きな世界へ飛躍しようと思います。

今回のチャレンジではSceneKitとAVFoundation、そしてCoreImageテクノロジーを統合します。

まずは準備として、立方体を用意します。
インターフェースビルダーの構成は特に目新しいものはなく、
単に

IBOutlet SCNView *_view;

だけバインドしておくだけになります。

今まで触れませんでしたが、
インターフェースビルダーで、
SceneViewのプロパティとして、Allow camera controlにチェックをつけておけば、
コードを書かなくても、マウスでの単純なカメラ回転などの処理を行ってくれます。

SceneCamera_—_MainMenu_xib_と_投稿の編集_‹_WOWDEV_—_WordPress

今回は、強制的なレンダリングループは必要ないので、Playにはチェックしていません。

では一旦立方体を用意するコードを書きます。

いくつか補足すると、
SCNBox *boxGeometry = [SCNBox boxWithWidth:20 height:20 length:20 chamferRadius:0];
で立方体を用意します。chamferRadiusは角丸ですね。
planeMaterial.diffuse.contents = [NSColor redColor];
contentsにNSColorを入れると、単色で塗りつぶす事が出来ます。

さて、次にAVFoundationの統合として、カメラを使ってみましょう。
AVFoundationの変数を追記すると、変数が以下のようになります。

そして、カメラを初期化します。

この辺りはiOSと大体同じですね。
カメラを選ぶ場合はより複雑ですが、ひとまずこれでよしとしましょう。

では、統合します。

はい、完成です。
さらに倍プッシュでCoreImageを統合しましょう。

なんということでしょう。
たったこれだけで、各種フレームワークが統合されてしまいました。
面倒なグルーコードなど、1行も必要なかったのです。

以上のコードを実行すると、
このようになります。

cam from wowdev on Vimeo.

コードがちょっと分散してしまったので、
全コードを以下にまとめます。

ビルドするためには、
Quartz.framework,
AVFoundation.framework
が追加で必要になるので、注意しましょう。

このように高レベルAPIを駆使して富豪的にプログラミングをするというのも、
SceneKitの醍醐味です。
是非皆さんも味わってみてはいかがでしょうか。