Rikkymodule/関数一覧/○○draw

このページでは、Rikkymoduleで追加される関数を解説する。

## glassdraw\_init関数、glassdraw関数

ガラスで屈折するように描画することができます

* glassdraw\_init関数で初期化と設定をして、glassdraw関数で描画をします

```
 rikky\_module.glassdraw\_init(table)

```

* 引数のテーブルにさまざまなキーを設定します

```
color		: 屈折して表示するイメージを単色化させる色の数値
reverse		: 上下左右反転を有効ならば1、無効ならば0の数値
reverseUp	: 上下反転を有効ならば1、無効ならば0の数値
reverseSide	: 左右反転を有効ならば1、無効ならば0の数値
blur		: ぼかす範囲の数値
refractive	: 0から1までの屈折率の数値
offsetZ 	: フレームバッファまでの仮想的な高さの数値
boundary	: 屈折する光が四隅、四辺を超えたときの処理の仕方を決める文字列
 -"loop"	: 境界までくると反対側からループしてような処理になります
 -"inverted"	: 境界より先はイメージが反転した処理になります
 -設定なし	: 境界の色を引き延ばした処理になります
async		: 取得する背景を同期するならば1、しない場合は0の数値
culling		: 裏面を非表示にするならば1、しない場合は0の数値
zoom		: 映し出す画像を拡大縮小させるときに設定する数値で、1だと等倍、2だと2倍のようになります
lens		: ガラスの面に凹凸を決める文字列
 -"convex"	: 凸レンズ気味に映し出されるようになります
 -"concave"	: 凹レンズ気味に映し出されるようになります

```

* 各キーは必要なものだけ設定することも可能です
	+ つまり常にこれらのキーに数値や文字列を指定する必要がないわけです
* glassdraw\_init関数で設定して、glassdraw関数で描画する間にobj.loadなど新しくイメージを読み込む処理をすると思わぬ事態になるかもしれません
	+ obj.loadなどは使わないようにしてください
* rikky\_module.glassdraw関数で描画します
* 引数はobj.drawかobj.drawpolyと同じようにx座標などを渡します
	+ どちらになるかは引数の数で自動で判断します

## materialdraw\_init関数、materialdraw関数

光源があるかのように描画することができます

* materialdraw\_init関数で初期化と設定をして、materialdraw関数で描画していきます

```
 rikky\_module.materialdraw\_init(table)

```

* 引数のテーブルにさまざまなキーを設定します

```
lignt_num	: 用意する光源の数の数値、最大で4まで指定可能です
position1	: 1つ目の光源の位置を座標をもったテーブル
position2	: 2つ目の光源の位置を座標をもったテーブル
position3	: 3つ目の光源の位置を座標をもったテーブル
position4	: 4つ目の光源の位置を座標をもったテーブル
 position系のテーブルには4つのキーを指定できます
 -x		: 光源のある位置のx座標の数値
 -y		: 光源のある位置のy座標の数値
 -z		: 光源のある位置のz座標の数値
 -object	: 特定のものを光源にするための文字列
  -"shadow"	: カメラ制御のシャドー効果の光源の位置の数値を用いるようになります
  -"camera"	: カメラ制御のカメラの位置の数値を用いるようになります
  -"L1から100までの数値"
		: 指定した数値のレイヤにあるオブジェクトの位置の数値を用いるようになります
		ただし、その位置にオブジェクトがない場合は無効になりxやyやzで指定したキーの数値の位置になります
		例として、50レイヤにあるオブジェクトの位置を光源に用いる場合は"L50"の文字列を指定します
  -指定なし	: xやyやzで指定したキーの数値の位置になります
light1		: 1つ目の光源の色情報をもったテーブル
light2		: 2つ目の光源の色情報をもったテーブル
light3		: 3つ目の光源の色情報をもったテーブル
light4		: 4つ目の光源の色情報をもったテーブル
 light系のテーブルには3つのキーを指定できます
 -R		: R(赤系)の0から255までの数値
 -G		: G(緑系)の0から255までの数値
 -B		: B(青系)の0から255までの数値
ambient	: 環境色を設定するテーブル、3つのキーを指定できます
 -R		: R(赤系)の0から100までの数値
 -G		: G(緑系)の0から100までの数値
 -B		: B(青系)の0から100までの数値
emissive : 元のオブジェクトのRGB値に加える色味のテーブル、3つのキーを指定できます
 -R		: R(赤系)の0から255までの数値
 -G		: G(緑系)の0から255までの数値
 -B		: B(青系)の0から255までの数値
specular : 鏡面反射する色身のテーブル、4つのキーを指定できます
 -R		: R(赤系)の0から255までの数値
 -G		: G(緑系)の0から255までの数値
 -B		: B(青系)の0から255までの数値
 -shininess	: ハイライトのシュッとする感じを決める数値

```

* 各キーは必要なものだけ設定することも可能です
	+ つまり常にこれらのキーに数値や文字列を指定する必要がないわけです
* メモリには直前に使った設定が残っているので、予想と違うことになる場合があります
	+ その場合は設定する前に、materialdraw\_init(0)と0を引数に渡して、すべてを初期化させることも可能です
* materialdraw\_init関数で設定して、materialdraw関数で描画する間にobj.loadなど新しくイメージを読み込む処理をすると思わぬ事態になるかもしれません
	+ obj.loadなどは使わないようにしてください
* rikky\_module.materialdraw関数で描画します
* 引数はobj.drawかobj.drawpolyと同じようにx座標などを渡します
	+ どちらになるかは引数の数で自動で判断します

## materialdrawEx関数

光源があるかのように描画することができます

* materialdraw関数とmaterialdraw\_init関数を合わせて強化した関数です
* オブジェクト指向的な使い方をします

```
 material = rikky\_module.materialdrawEx(table)

```

* このように光源の情報を含んだtableを引数に渡すとその状態を保持したmaterialが返ってきます
	+ 描画する際はmaterial:draw()かmaterial:drawpoly()のように使います
		- 通常のobj.drawやobj.drawpolyと同じように位置や角度などの引数を渡すだけです
		- materialdrawEx関数に渡すtableは以下のようにいくつかのキーを設定します
* materialdrawEx関数に渡すtableは以下のようにいくつかのキーを設定します

```
table = {
  ambient = {R = number, G = number, B = number},
  emissive = {R = number, G = number, B = number},
  damping = number,
  drawhq = boolean,
  drawhq\_partition = number,
  light = {
    {
      color = {R = number, G = number, B = number},
      specular = {R = number, G = number, B = number, shininess = number},
      position = {x = number, y = number, z = number} or string or number,
      option = {
        type = string,
        nx = number,
        ny = number,
        nz = number,
        degree = number,
        double = boolean,
        degree2 = number,
        nx2 = number,
        ny2 = number,
        nz2 = number,
        texture = string or number,
        wx = number,
        wy = number,
        wz = number,
        partition = number,
        width = number,
        height = number,
      }
    },
    {
    --設定したい分だけライトの情報を記述します
    },.....
  }
}

```

* tableのキーとその値のデータ型は上記のようになっています
* optionはtypeによって設定するキーが異なってきます
	+ 一部、materialdraw関数と同名のキーでもニュアンスが異なるものがあります

```
ambient			: 全体を照らす光で、マテリアルの色の底上げのように使い、RGBは0から255で色を指定します
emissive		: マテリアル自体の発光度合いで、0から100で指定します
damping			: 光は距離の逆二乗で減衰していきます、それの度合いの数値です、0の場合は減衰は起きません
drawhq			: material:draw関数を使用した際により正確に描画するためのものです
drawhq_partition	: drawhqを有効かした際に、正確さの細かさです、drawhqが有効でもこれを設定していない場合drawhqは無効になります
light			: 光源になるライトを設定します、ライトは何個も設定できます
color			: ライトの色を設定します、RGBは0から255で各色を設定します
specular		: 鏡面反射する強度を設定します0以上の数値を設定できます、RGBは各成分の強度で、shininessはハイライトの大きさで、数値が大きいほどシャープになります
position		: ライトの位置を設定しますxyzで数値を設定するか、文字列で"camera"だとカメラの位置、"shadow"だとカメラ制御の光源の位置です、数値だとそのレイヤのオブジェクトの位置になります、"@数値"だと相対的にレイヤを指定できます
option			: ライトのタイプを変える際に用いります、optionがなければライトは点光源になります
type			: "spotlight"または"directlight"のどちらかが使えます、"spotlight"だと点光源に帽子をかぶせたようになり、"directlight"は面光源に切り替えられます
nx			: "spotlight"や"directlight"の光の進むベクトルのx方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの面の向きのx成分になります
ny			: "spotlight"や"directlight"の光の進むベクトルのy方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの面の向きのy成分になります
ny			: "spotlight"や"directlight"の光の進むベクトルのz方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの面の向きのz成分になります
degree			: "spotlight"や"directlight"の光の広がりの角度で0から90度までです
double			: "spotlight"や"directlight"の背面からも光を出るようにします
degree2			: "spotlight"かつ背面の光が有効のときの光の広がりの角度で0から90度までです
nx2			: "spotlight"かつ背面の光が有効のときの光の進むベクトルのx方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの面の裏側の向きのx成分になります
ny2			: "spotlight"かつ背面の光が有効のときの光の進むベクトルのy方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの面の裏側の向きのy成分になります
ny2			: "spotlight"かつ背面の光が有効のときの光の進むベクトルのz方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの面の裏側の向きのz成分になります
texture			: "directlight"の光を指定します、数値だとそのレイヤの画像、文字列"@数値"だと相対的に指定したレイヤ画像、文字列"color"だとライトのcolorで指定した色、*画像のパス(画像パスの先頭にアスタリスクをつけた文字列)だとその画像が光源になります
wx			: "directlight"の面の横向きのベクトルのx方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの横の向きのx成分になります
wy			: "directlight"の面の横向きのベクトルのy方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの横の向きのy成分になります
wz			: "directlight"の面の横向きのベクトルのz方向の成分を指定します、ただしpositionでレイヤを指定している場合はそのオブジェクトの横の向きのz成分になります
partition		: "directlight"でレイヤもしくは画像をtextureで指定した場合にその光源の細かさを設定する数値です、小さいと重たくなります
width			: "directlight"でcolorのtextureを指定した場合にその面光源の横幅を指定する数値です、レイヤかパスによる画像を指定している場合にこの数値を設定するとこの横幅にリサイズされます
height			: "directlight"でcolorのtextureを指定した場合にその面光源の縦幅を指定する数値です、レイヤかパスによる画像を指定している場合にこの数値を設定するとこの縦幅にリサイズされます

```