2009後期
情報グラフィックス論U
担当 鳥海有紀
授業資料 情報グラフィックス論U

#declear と繰り返し −補足−

テキストに記載がありますが、段階を追って説明を補足します。
//
//   木の板
//
#include "colors.inc"
#include "shapes.inc"   
#include "Woods.inc"

camera {
  location <0, 5, -50>
  look_at <0, 0, 0>
  angle 30
  }
  
light_source {<-10, 10,  0> color White }
light_source {< 10, 10, -10> color White }

object {
  Cube
  scale <1, 0.2, 2.0>
  texture { T_Wood2 }
  }

木の板を別名で定義するには#declareを使います。
//
//   木の板  2

//     定義をする部分
//
#declare WoodStep =
object {
  Cube
  scale <1, 0.2, 2.0>
  texture { T_Wood2 }
  }

//   表示する部分
//
object {
  WoodStep
}

同じ図形を一定間隔など規則的に表示するときには繰り返し#while#endの 構文を使います。
//
//   木の板  3 x方向の移動

//   表示する部分
//
#declare Cnt = 1;              // while ループに入る前の Cnt の値を設定する。
#while (Cnt <= 10)
object {
  WoodStep
  translate < Cnt*3, 0, 0 >
}   
#declare Cnt = Cnt + 1;             // ループするたびに Cnt の値を1増やす。
#end

繰り返しの構文

     #while (条件文)
       :
     #end

条件文には繰り返しを続ける条件を設定します。 ここではCnt <= 10が条件です。 この条件が成立している間、#endまでの構文を繰り返します。 繰り返す時に、少しずつ表示の内容を変更していきます。 一般には表示の位置を変更します。 ここではtranslate < Cnt*3, 0, 0 >で表示位置を変えています。 Cntは変数といい、ループの中で値が増えていくように定義しています。 この繰り返しの実行しているイメージは右図のようになります。

x方向だけでなくY方向にも同時に移動するように指定すると 階段のようにな絵にすることができます。
//
//   木の板  4  x方向 y方向の移動

//   表示する部分
//
#declare Cnt = -5;       //  階段が画面の中心になるように初めの値を
                         //  −5に設定            
#while (Cnt <= 10)
object {
  WoodStep
  translate < Cnt*2, Cnt*2, 0>
}   
#declare Cnt = Cnt + 1;                     
#end

繰り返しのときに使う変数をtranslateではなく、 rotateに使用すると文字盤など円形に変化する図形を作ることができます。
//
//   木の板  5  回転での繰り返し


//   表示する部分
//
#declare Cnt = 1;                
#while (Cnt <= 8)
object {
  WoodStep
  translate < 0, 0, -4>
  rotate Cnt*45*y
}   
#declare Cnt = Cnt + 1;                     
#end

これにY方向の移動を加えると螺旋階段のような表現ができます。
//
//   木の板  6  回転とY 方向の繰り返し


//   表示する部分
//
#declare Cnt = 1;                
#while (Cnt <= 8)
object {
  WoodStep
  translate < 0, Cnt*2, -4>
  rotate Cnt*45*y
}   
#declare Cnt = Cnt + 1;                     
#end


授業資料 情報グラフィックス論U

Copyright 2002-2009 Yuki Toriumi