h1. sglの説明 h2. What is sgl? sglは,Rubyからグラフィックやサウンドを簡単に扱えるようにしたライブラ リである.できるだけ優しくプログラミングを初められるように,シンプルな 記述で必要最小限の動作するプログラムを作成できるようになっている. "DBN":http://dbn.media.mit.edu/ というプログラミング環境が提供していた 理念を継承し,可能な限り簡単にプログラミングに取り組めるように工夫して いる.DBNの理念を継承した環境として, "Processing":http://www.processing.org/ とは兄弟関係にあると言える. グラフィックスはOpenGL,Window表示,マウス入力,キー入力などにはSDLを 用いている.またMIDIの入出力なども組み合せて使えるようになっている.ラ イブラリーの構造はGLUTを参考にしている.
# 基本的なプログラムの例
reuire 'sgl'        # 最初に必ず必要
window 100,100      # 100x100のウィンドウを生成
background 0        # 背景は黒にします
color 100           # 白を指定します
line 20,20,80,80    # 線を引きます
rect 20,20,80,80    # 四角を描きます
wait                # プログラムが終了しないように待つ.ESCキーで終了する.

# 色空間
color 100,0,0          # 赤になる.r,g,bで色が使える
color 100,0,0,50       # 半透明の赤.100が不透明(デフォルト).0が完全に透明.
colorHSV 50,0,100      # hsv方式での色指定もできる.
backgroundHSV 70,0,100 # 背景の指定もhsvでできる.
colorHSV 50,0,100,50   # もちろんhsv方式でもアルファ値は指定できる.

# 3Dも使える
useFov(60)             # field of view.画角を指定
useDepth               # depth bufferを使う
line 20,20,20,80,80,80 # とりあえず線
color 0,100,0,50       # とりあえず半透明
box 20,20,20,80,80,80  # 箱.半透明になっている
useSmooth              # 線にanti aliasがかかる.

# MIDI関係
useMidi              # midiを使うということ宣言
note 1, 60, 90, 100  # ch, note, vel, msec.

# 詳細な描画について
beginObj(QUADS)
vertex 20,20
vertex 80,20
vertex 80,80
vertex 20,80
endObj
# 同様に,vertexにz軸の情報を加えれば,3Dとなる.

オブジェクトの種類は,
LINES POINTS LINE_STRIP LINE_LOOP TRIANGLES TRIANGLE_STRIP
TRIANGLE_FAN QUADS QUAD_STRIP POLYGON
が使える.OpenGLと同じ.

# 基本的なループ構造
window 100,100
def display
  line 0,0,100,100
end
mainloop
とすると,ループして,描画しつづける.

# マウス入力
ループした状態で,
def onMouseDown(x,y)
  line 0,0,x,y
end
などとすると,callbackがかかる.
同様に,onMouseUp, onKeyDown, onKeyUpなど.

# MIDI input関係
useMidiIn            # midi inを使うということ宣言
def onNoteOn(ch, note, vel)
  p [ch, note, vel]
end
などとできる.

同様に,onNoteOff(ch, note)もある.

# サウンド再生機能
useSound
sound = loadSound('sine.wav')
sound.play(60, 100, -100) # note, vel, pan