gosub コマンドを使って少し改変したものです。unid = 1 material mat gosub "desk" end "desk": !脚1 block leg_size, leg_size, height - thin !脚2 add width - leg_size, 0, 0 block leg_size, leg_size, height - thin del 1 !脚3 add width - leg_size, depth - leg_size, 0 block leg_size, leg_size, height - thin del 1 !脚4 add 0, depth - leg_size, 0 block leg_size, leg_size, height - thin del 1 !天板 add 0, 0, height - thin block width, depth, thin del 1 !ホットスポット hotspot 0, 0, 0 hotspot width, 0, 0 hotspot 0, depth, 0 hotspot width, depth, 0 !ピンクのホットスポット unid = 1 hotspot 0, depth/2, height, unid, width, 1+128 :unid = unid+1 hotspot width, depth/2, height, unid, width, 2 :unid = unid+1 hotspot -1, depth/2, height, unid, width, 3 :unid = unid+1 hotspot width/2, 0, height, unid, depth, 1+128 :unid = unid+1 hotspot width/2, depth, height, unid, depth, 2 :unid = unid+1 hotspot width/2, -1, height, unid, depth, 3 :unid = unid+1 return
values "width" 0.9, 1.2, 1.5 values "depth" 0.6, 0.8, 1.0 parameters height = 0.8
GOSUBコマンド
gosub コマンドは、プログラム内で繰り返し使用されるコードブロックを別の場所にまとめて記述し、その部分を何度も呼び出す際に使用されます。コードが複雑になりそうなときに、よく使います。
例えば、同じ机を2つ並べて配置したい場合、机のコードをもう一度書くと、コードが長くなり管理が難しくなります。そこで、gosub コマンドを使ってまとめておくことで、簡潔に処理できます。下記のようなコードで、机を2つ並べることが可能です。
unid = 1 material mat gosub "desk" add width + 0.1, 0, 0 gosub "desk" end "desk": ~机の3Dスクリプト~(省略) return
gosub コマンドを使うときは、end コマンドでスクリプトの終わりを定義する必要があります。また、ラベル("desk")を定義した後には、return コマンドを使って、そのラベルの終わりを定義する必要があります。
なお、ラベルは end コマンド以降に定義する必要があるため、順番を間違えないように注意してください。
パイプ椅子の作成とTUBEコマンド
![]() |
| 新規追加パラメータ |
"chair":
pipe_size = 0.01
pipe_pos = chair_size/2 + 0.03
pipe_height = chair_height - 0.03
!脚の作成
material chair_pipe_mat
gosub "chair_pipe"
rotz 90
gosub "chair_pipe"
!座面の作成
material chair_mat
add 0, 0, chair_height - 0.03/2
cylind 0.03/2, chair_size/2
del 1
end
return
"chair_pipe":
tube 2, 6, 1+2+16+32+64,
0, 0, 900,
pipe_size, 360, 4000,
pipe_pos*cos(45), pipe_pos*cos(45), -1, 0,
pipe_pos*cos(45), pipe_pos*cos(45), 0, 0,
pipe_pos*cos(45), pipe_pos*cos(45), pipe_height, 0,
pipe_pos*cos(225), pipe_pos*cos(225), pipe_height, 0,
pipe_pos*cos(225), pipe_pos*cos(225), 0, 0,
pipe_pos*cos(225), pipe_pos*cos(225), -1, 0
return
まずは、"chair_pipe" ラベルを作り、この中で脚の形を作っていきます。今回は tube コマンドを使って門型を一つ作成します。tube の詳しい使い方については GDLリファレンスに記載されていますが、簡単に説明すると、断面形状の多角形座標とパスの座標を定義して3D形状を生成するコマンドです。なお、断面形状に曲線を使いたい場合は、追加ステータスコードを使用します。
今回の椅子の脚は円柱を門型に加工したような形なので、追加ステータスコードを使っています。詳しくはリファレンスに記載されていますが、簡単に触れると、900 と書いてある行で中心座標を定義し、4000 と書いてある行で半径と角度を定義しています。また、コサインやサインの計算も使えるので、覚えておくと便利です。
次に、"chair" ラベルを作り、この中で "chair_pipe" ラベルを2回呼び出します。2回目は rotz コマンドで座標系を90度回転させるので、4本の足が出来上がります。その後、cylind コマンドで座面を作成します。cylind コマンドは半径と高さを定義して円柱形状を作るコマンドです。add コマンドで椅子の高さまで移動させてから cylind を呼び出すことで、椅子のような形が完成します。
最後に、"chair" ラベルを "desk" の後に呼び出せば完成です。(以下のように)
unid = 1 material mat gosub "desk" add chair_pos[1], chair_pos[2], 0 !後で椅子の位置を自由に動かせるようにchair_posというパラメータを定義しておく gosub "chair" !←ここに追加 end






0 件のコメント:
コメントを投稿
何でも気軽にコメントください。