最終更新日:2020年12月1日
LiveCodeLabは3Dプログラミング用の言語環境です。Go play!ボタンを押してはじめましょう。
LiveCodeLabでは打ち込んだプログラムがその場で実行されていきます。3D画像や音を利用したプログラミングが出来ます。
LiveCodeLabのホームページにあるTutorialsの解説です。
box(立方体)を描きます。
x,y,zそれぞれの軸に関して1rad回転します。
frame(プログラム1回の実行ごとに1ずつ増える変数)を使って、回転角度を徐々に変えます。上の例では1/100、2/100、・・・[rad]に回転角が増えていきます。
frameはPCの性能により速さが変わってしまいます。一方、timeはPCのタイマーによる時間なのでどのPCでも同じ時間となります。timeは1秒で1増えるような変数です。0.5秒のときは0.5になっています。なので、rotate timeとすると時間の経過に従って回転角度が増えていきます。1秒で1rad増えるわけです。上の例ではtime/2としているので1秒で0.5radの回転になります。
ただし、timeはGoogle Chromeでは何故か動かなくなることがよくあります。その場合はfirefoxやedgeを使うか、frameで動かすかにしましょう。
boxのようなオブジェクトの移動にはmoveを使います。move x,y,zで各座標の移動量を指定します。座標系はWindowの中心位置に原点があり、そこから右向きにx軸正方向、上向きにy軸正方向、紙面て前向きにz軸正方向があります。moveで移動量を指定して原点を動かした後、boxなどのオブジェクトを指定すると、移動した後の原点上にオブジェクトが書かれます。上の場合は右上のboxが後に指定したboxです。
scaleによりサイズや移動量の単位を変更することが出来ます。上の例ではscale 2以降はboxが指定されていますが、このとき単位1が2と読み替えられて2倍の大きさのboxが生成されいます。
繰り返しの構文timesです。timesの後の行はタブ(図では△で表されています)で1段下がった状態になっています。Pythonのインデントと同じですね。1段下がっているmove 0.2,0.2,0.2とboxが3回繰り返されます。ですからx,y,zに対して0.2ずつ移動した3つのboxが描かれているわけです。先頭のrotate 1で全体を鳥瞰できるようにx,y,zに対して1rad回転しています。
boxの色を変えます。fill r,g,bでRGB(赤緑青)の指定が出来ます。r,g,bはそれぞれ0から255の整数です。上の場合はrとgが255で、bが0なので黄色となります。
boxのエッジなどの色を変えます。図ではr,g,bすべて255なので白色のエッジになっています。
色を色の名前で指定することもできます。図ではgreenyellowが指定されています。
環境光の設定はambientLight r,g,bで指定します。図では水色が指定されており、物体が水色に見えています。
背景も同様にbackground r,g,bで指定できます。
背景にグラデーションを描けることが出来ます。図ではcolor 190,10,10からcolor 30,90,100を経て、color 0(黒)に変化させています。
lineは線を描くコマンドです。rotate time/9 で次に来るlineを回転させます。time/9は経過時間の1/9の速度でだんだん大きくなっていく変数です。すなわち9秒経ったら1になる変数です。rotate time/9なので9秒で1rad回転することになります。同様に20回実行しますが、2回目以降の実施時にはtimeが少し進んでいますので少し角度の違うlineが描かれます。こうすることで20本のlineが描かれ、frame(LiveCodeLabのプログラムの1回の試行)毎にtimeが進んでいるので動いて見えるわけです。
ballDetailはボールの詳細描画の指定です。(たぶん)30がMaxで1とかにすると超荒いボール(というよりも角柱?)になります。最低でも10以上の指定がおすすめです。
座標系を扱うコマンドはpushMatrix, popMatrix, resetMatrixがあります。pushMatrixはコマンド発行時点での座標系(原点位置および向き)を保存します。popMatrixはコマンド発行時に現在の座標系をpushMatrixで保存されている座標系に設定しなおします。resetMatrixはその時点で初期座標系に戻します。frameの先頭では常に初期座標系になっています。
ぼかしを入れることもできます。
上書きで前に描いた図形の上に重ね描きしていきます。
1度だけ描きたいときなどにはdoOnceコマンドを使います。これを使うとdoOnce以下のインデントされた領域が1度だけ実行されます。ここでは上側のdoOnceの前の✓をbackspaceキーでずっと消しながらbox 0.5の表示をしています。
doOnceは右側にコマンドを入れることもできます。ここでは下側のdoOnce ballコマンドの前の✓をbackspaceキーでずっと消しながらballの表示をしています。
条件文はこのように書きます。ここではframe % 60(frame変数の60での剰余、frame自体は0~∞まで変化していく変数ですが、60での剰余を計算するので0~59までの変化を繰り返すようになります)を計算し、その結果が20以下であればboxを、それより大きく40以下であればballを、それよりさらに大きければpegを表示しています。計算機により変化する速さが変わりますが、box -> ball -> peg -> box -> ball -> peg という変化をずっと繰り返します。