オブジェクト選択時の輪郭線を実装したい
最近3DのエディターっぽいものをmacOSで作ってます。SceneKit 、 Objective-C で。

↑BlenderやSceneKitのエディターでは3D空間上にあるオブジェクトをクリックするとそのオブジェクトを選択している目印として黄色っぽい色の輪郭線が表示される(画像はBlenderの場合)。
こういうのを表現したいのだけど、、、考えたらこれ相当面倒だよね?
苦肉の策でやったのがクリックされたオブジェクトをコピーしちょっと拡大して、その背面(三角形の裏面やな)を表示する、というトゥーンシェーダーなどで輪郭線を描く場合によく紹介されてる手法。
SCNNodeオブジェクトをコピーしたい
↑オブジェクトのコピーはこんな感じで。コピーしたオブジェクトのボーンを消す必要があることに気付くまで随分時間がかかってしまったけ。

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

↑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
https://ringsbell.blog.fc2.com/tb.php/1111-f4aa39c4