「論理演算のいじめパタン」で作成したキャンディポットの再挑戦版です。
「おまけの別バージョン」として、空になったキャンディポットの瓶の中に指輪が入っているバージョンを作ったのですが、肝心な指輪のモデリングが相当手抜きで、引っかかっていました。先日作成した「ダイヤの指輪」を使いまわして、再挑戦します。
データをご覧いただくと、キャンディポットの瓶の部分は手続きpotの中で、全ての部品のOR(和集合)を取っていて、全体として1つの物体となっています。ですので、下図の様に、新たに平面を定義して2つのAND(共通部分)を取ると、真ん中で切り取った断面を見ることが可能となります。
記述では、以下の様になります。
and
{
pot;
plane 0,0,0, 1,0,0;
}
肝は、手続きpotの中で、全ての部品のORを取って、全体で1つの物体としていることです。もし、ORを取っておらず、例えば、「コルク栓」と「瓶」が別々の物体として定義されていた場合、様子はガラッと変わってきます。上のリストで示したように「and {〜}」ブロックで囲んでしまうと、物体「コルク栓」と、物体「瓶」と、プリミティブ「平面」のANDを取る、と言う意味になってしまい、「コルク栓」と「瓶」に共通部分が無いことから、まるっと全部消えて、何も見えなくなってしまいます。「コルク栓」と、「瓶」がORされて、1つの物体「pot」になっているお陰で、物体「pot」と、プリミティブ「平面」のANDが演算されて、期待した動作となります。
実際にレイトレーシングしてみると、下図の様な感じです。
ANDを取って削ったのは手続きpotだけ、ですので、手続きpotの外で定義されている指輪は切り取られず、そのまま残っています。ガラスの瓶も、コルクの栓も、首に巻いた赤い紐、マッピングデータに至るまで、手続きpot内で定義された物体全てがバッサリ切り取られています。
時折、モデリングデータのデバッグ中に断面の形を確認したり、「瓶」の様な閉空間を作った時の内部確認などに使っています。
今回はこの機能を応用して、何もない空間に瓶がワープアウトしてくる(ヌルッと現れる)様子をレンダリングしてみます。
完成したデータと動画です。
Xi-TRACEデータ | candy_pot_dia.xitr |
マッピングデータ | candy_pot_cork.jpg |
断面の属性は属性crossで指定しています。このデータでは黄色にしましたが、他の色にしたり、透明な属性にしたり、変更することができます。