頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


オブジェクト選択時の輪郭線を実装したい

最近3DのエディターっぽいものをmacOSで作ってます。SceneKit 、 Objective-C で。

Blenderオブジェクト選択時

↑BlenderやSceneKitのエディターでは3D空間上にあるオブジェクトをクリックするとそのオブジェクトを選択している目印として黄色っぽい色の輪郭線が表示される(画像はBlenderの場合)。

こういうのを表現したいのだけど、、、考えたらこれ相当面倒だよね?
苦肉の策でやったのがクリックされたオブジェクトをコピーしちょっと拡大して、その背面(三角形の裏面やな)を表示する、というトゥーンシェーダーなどで輪郭線を描く場合によく紹介されてる手法。

SCNNodeオブジェクトをコピーしたい
↑オブジェクトのコピーはこんな感じで。コピーしたオブジェクトのボーンを消す必要があることに気付くまで随分時間がかかってしまったけ。

{
    SCNMaterial *firstMaterial = newNode.geometry.firstMaterial;
     firstMaterial.cullMode = SCNCullModeFront;
}
↑materialにお好みの色を設定するけど、それ以外にも三角形の裏面を表示するんやで、とするのにcullModeプロパティ(デフォはSCNCullModeBack)を設定。SCNCullModeFrontが裏面って覚えられへんわ、俺。

オブジェクト非選択時 オブジェクト選択時
↑右がクリックした後、、、まあそれっぽいんだけどさコピーしたオブジェクトのscaleをどうすんのよ?って感じなんだけど、、、カメラとオブジェクトの距離の関数でscaleを決めてもイマイチだったんだなあ(改良の余地はあったかもしれん)。選択されてるのはわかるからもうこれでいいんだけどさ。
Blenderみたいにどんなサイズでも綺麗に1pxの輪郭線を描くのって、、、どうしてるんだろうね。
スポンサーサイト




<< 100均とANKERの車内用バッテリーチャージャー  TopPage  SCNNodeオブジェクトをコピーしたい >>

コメント


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

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1111-f4aa39c4




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