



2D レイアウト/アクション出力形式案





						吉良 理人

						Feb. 23, 2001 Version 0.0.8

						Feb. 2,  2001 Version 0.0.7

						Feb. 2,  2001 Version 0.0.6

						Jan. 23, 2001 Version 0.0.5

						Jan. 17, 2001 Version 0.0.4

						Dec. 19, 2000 Version 0.0.3

						Dec. 15, 2000 Version 0.0.2

						Dec. 11, 2000 Version 0.0.1







§本文書の趣旨



  本文書は、2D 表示系におけるレイアウトの編集および、操作に伴う画面アクション

の生成を自動化するための機構(以下、「2D エディタ」と呼称)より出力される、

中間形式についての案を述べることを目的とするものである。



-----------------------------------------------------------------------------

§目次



1.0  2Dエディタの役割

  1.1  レイアウト設定

  1.2  アクション定義



2.0  概要



  2.1  2Dオブジェクトの階層構造

  2.2  処理概略



    2.2.1  使用オブジェクトの定義

    2.2.2  オブジェクトの状態の定義

    2.2.2  アクションの再生



	

3.0  出力形式



  3.1  オブジェクト定義セクション



    3.1.1  obj               使用オブジェクトの宣言





  3.2  状態定義セクション



    3.2.1  reftri	    参照テクスチャ定義

    3.2.2  status〜endstat  状態指定

    3.2.3  tex		    テクスチャ指定

    3.2.4  vertex	    頂点指定

    3.2.5  size		    サイズ指定

    3.2.6  center	    回転中心指定

    3.2.7  angle	    回転角指定

    3.2.8  uv		    テクスチャ参照位置指定

    3.2.9  uvsize	    テクスチャサイズ指定

    3.2.10 texoff	    テクスチャ解除(予定)

    3.2.11 color	    RGB 値設定

    3.2.12 alpha	    アルファブレンディング指定

    3.2.13 pri		    プライオリティ補正値設定

    3.2.14 magni	    下位オブジェクト座標値係数設定

    3.2.15 hide		    非表示

    3.2.16 show	            表示





  3.3  アクション記述セクション



    3.3.1  action〜actend   アクション定義ブロック

    3.3.2  track〜trend	    アクショントラック定義ブロック

    3.3.3  wait		    時間待ち

    3.3.4  set		    状態設定

    3.3.5  morf		    補間変化





-----------------------------------------------------------------------------



1.0  2Dエディタの役割



    2D エディタは、二つの役割を持つ。一つは 2D オブジェクトにより構成される

  画面のレイアウトを編集する役割、もう一つは、特定のレイアウトから他のレイ

  アウトに移行する際の挙動を編集する役割である。



    本ドキュメントでは前者を「レイアウト設定」、後者を「アクション定義」と

  呼称する。







  1.1  レイアウト設定



    レイアウト定義においては、配置するオブジェクトの種類、位置、サイズ、

    使用するテクスチャ等の設定を行い、画面のレイアウトを行う。



    ここで設定されたレイアウトを「状態」と呼ぶ。





  1.2  アクション定義



    「1.1 レイアウト設定」で設定されたレイアウト間を、特定の時間軸にそって

    補間し変化させるための時間設定を行う。









2.0  概要



  2.1  2Dオブジェクトの階層構造



    2D オブジェクトは、親子関係からなる階層構造を持つことができる。

    子として作成された 2D オブジェクトの座標値は、親オブジェクトの基準点に

    対する相対座標値として扱われるため、親オブジェクトを移動させると子以下の

    オブジェクトがすべて付随して移動することになる。



    また、表示属性も継承されるため、親オブジェクトを非表示にすると、その子

    以下のオブジェクト全てが非表示状態になる。







  2.2  処理概略



    2.2.1  使用オブジェクトの定義



      画面を構成するオブジェクトを、全てここで定義する。ある画面においては、

      どのような状態を設定しようと使用されるオブジェクトの種類および総数は

      変化しないものとする。



        これは、変化の途中でオブジェクトの追加や削除ができないことを意味する。

      変化の途中から表示や消去を行いたいオブジェクトがある場合は、この段階で

      あらかじめ作成しておき、各状態において表示/非表示を切替えることで制御

      する。



    2.2.2  オブジェクトの状態の定義



      各オブジェクトは、一つ以上の「状態」を持つ。

        



    2.2.2  アクションの再生



        アクションは、変化を必要とするオブジェクトに対し、以下のように時間軸を

      設定することで作成する。



             開始                          終了



	      a       b          c         d

	     (1)-----> ========>(2)------>(3)

                保持    補間        保持



      上記の(1)〜(3)を、「状態ポイント」とし、その個数には制限は無いものと

      する。また、キーとなる a〜d の各ポイント間の時間を設定する必要がある。



      ポイント間の属性が「保持」の場合、開始点となるポイントにおける状態が

      その時間中保持される。終点となるポイントで別の状態が指定されていた

      場合、瞬時に状態が変化することになる。



      ポイント間属性が「補間」である場合は、始点状態から終点状態にかけて、

      時間軸に比例した補間を行う。







	

3.0  出力形式



  3.1  オブジェクト定義セクション



    3.1.1  obj               使用オブジェクトの宣言



	   obj  "オブジェクト名"  <属性> [vertex 頂点数]  [parent "親オブジェクト名"]



        "オブジェクト名" で指定された名称で参照されるオブジェクトを、

      <属性>で指定された種類のオブジェクトとして定義する。



      また、parent "親オブジェクト名" を指定すると、そのオブジェクトの親

      となるオブジェクトを指定することができる。親オブジェクトは、その子が

      定義されるより前に定義されていなければならない。



      <属性>には、以下のうち一つを指定する。





        empty		座標オブジェクト(描画情報無し)

	point		点

	line		線分

	lstrip		折れ線

	linestrip	折れ線

	box		長方形(枠のみ)

	sprite		スプライト(幅、高さ指定)

	zoom		スプライト(左上頂点、右下頂点指定)

	spin		回転スプライト(幅、高さ、中心点、回転角指定)



      なお、[頂点数]は、属性が lstrip の場合のみ必須項目として指定する。

      他の属性において指定されても無視される。





      例)



	obj "全体基準点"  empty

	obj "上枠基準点"  empty			parent "全体基準点"

	obj "下枠基準点"  empty			parent "全体基準点"

	obj "周波数基準"  empty			parent "全体基準点"



	obj "上枠ライン"  lstrip vertex 4	parent "上枠基準点"

	obj "PTT"	  sprite		parent "上枠基準点"

	

	obj "下枠ライン"  linestrip vertex 4	parent "下枠基準点"

	obj "MEM"	  sprite		parent "下枠基準点"

	obj "TUNE"	  sprite		parent "下枠基準点"



	obj "中央ゲージ"  sprite		parent "下枠基準点"

	obj "ゲージ点灯"  sprite		parent "中央ゲージ"

	

	obj "外枠"        box			parent "全体基準点"



	obj "数字14"	  sprite		parent "周波数基準"

	obj "小数点"	  sprite		parent "周波数基準"

	obj "数字1.00"	  sprite		parent "周波数基準"

	obj "数字0.10"	  sprite		parent "周波数基準"

	obj "数字0.01"	  sprite		parent "周波数基準"









  3.2  状態定義セクション



    3.2.1  reftri	参照テクスチャ定義



	   reftri <.tri名称>



       この命令以後、参照対象となる .tri を指定する。

       ファイル名をクォートで囲む必要は無い。







    3.2.2  status〜endstat	状態指定





	   status "オブジェクト名"

		  mode "状態名"

			[tex ...]

			[vertex ...]

			[size ...]

			[uv ...]

			[uvsize ...]

			[texoff]

			[pri ...]

			[color ...]

			[alpha ...]

			[hide]

			[show]

		  endmode



		  mode "状態名"



		    :



		  endmode

	   endstat



        オブジェクトの持つ状態を定義する。

      各オブジェクトは、複数の状態を持つことができ、それぞれの状態についての

      定義を行う。



        "オブジェクト名" には、状態を定義するオブジェクト名を指定する。



        <状態名>には、それぞれの状態を参照するための名称を記述し、次の<状態名>

      までの間に、使用テクスチャの指定、頂点座標の指定、表示サイズの指定など

      (tex, vertex, size, uv, uvsize, texoff, color, hide, show の各命令。後述)

      を記述することで、その状態として定義する具体的な描画情報を指定する。







    3.2.3  tex		テクスチャ指定



	   tex "テクスチャ名称"



        status 構文(3.2.2)の中で使用する。reftri命令(3.2.1)で指定された

      テクスチャに含まれるテクスチャを、その状態におけるテクスチャとして

      指定する。この命令実行直後は、指定されたテクスチャ全体がオブジェクトの

      テクスチャとして割り当てられる。

	   



    3.2.4  vertex	頂点指定



	   vertex <開始頂点番号> (Xn, Yn) [!(Xn+1, Yn+1) [!(Xn+2, Yn+2)[...]]]





        オブジェクトの頂点座標を指定する。親オブジェクトを持つオブジェクトの

      場合、ここでは親オブジェクトの基準点からの相対座標値を指定する。



        <開始頂点番号> では、座標値を設定する頂点の番号を指定する。

      頂点の番号は 0 から開始され、そのオブジェクトの指定可能な頂点数 -1 まで

      となる。



        各属性のオブジェクトの、指定可能な頂点数は以下の通り。





	    属性	頂点個数



            empty	1

	    point	1

	    line	2

	    lstrip	obj 命令での定義時に指定した個数

	    box		2

	    sprite	1

	    zoom	2





      box や zoom の頂点は、対角の頂点座標で指定する。lstrip の頂点数は、

      obj 命令でオブジェクトを定義した際に指定した値となる。







    3.2.5  size		サイズ指定



	   size  幅 高さ



        オブジェクトの幅と高さを指定する。

      この指定が必要なのは、sprite もしくは spin 属性のオブジェクトのみとなる。





    3.2.6  center	オブジェクト回転中心指定



	   center 中心X 中心Y



      spin 属性オブジェクトの回転中心とする位置を指定する。

      回転中心は、spin オブジェクトの矩形を正位置に置いた場合の

      左上頂点からの相対座標で指定する。



                  |<- X ->|   	

		--+-------+------------+

		^ |       |            |

		| |       |            |

		Y |       |            |

		| |       |            |

		v |       |            |

		--+-------+            |

		  |        回転中心    |

		  |                    |

		  |                    |

		  |                    |

		  +--------------------+



      場合によっては、回転中心はオブジェクト矩形の外側にあっても良い。

      spin オブジェクトは、ここで指定した点を中心に回転する。



      また、spin オブジェクトの表示座標として指定した点は、この回転中心に

      対応する。





    3.2.7  angle        回転角度指定



	   angle 回転角



      spin オブジェクトの回転角を指定する。回転角は、時計廻り方向に、

      一回転を 4096 とした実数で与える。



      補間時の回転方向は、補間命令のオプションで与える。





    3.2.8  uv		テクスチャ参照位置指定



	   uv 正規化u値 正規化v値



      tex 命令(3.2.3)で割り当てられたテクスチャ中における相対的な

      UV値を指定する。



      tex 命令で指定されたテクスチャのサイズを縦、横それぞれ 1.0 とし、

      割り当てたい UV値を比率で指定する。



      通常は uvsize 命令(3.2.9) と併用する。なお、テクスチャを使用できる

      オブジェクト(sprite, zoom)以外に使用しても意味を為さない。





    3.2.9  uvsize	テクスチャサイズ指定



	   uvsize  正規化横幅 正規化縦幅



      tex命令(3.2.3)で割り当てられたテクスチャ中において、実際に適用する

      テクセルのサイズを指定する。



      tex 命令で指定されたテクスチャのサイズを縦、横それぞれ 1.0 とし、

      適用したいテクセル幅をそれに対する比率で指定する。



      通常は uv 命令(3.2.8)と併用する。なお、テクスチャを使用できる

      オブジェクト(sprite, zoom)以外に使用しても意味を為さない。





    3.2.10 texoff	 テクスチャ解除(予定)



	   texoff



      その状態において、該当オブジェクトにはテクスチャを適用しないことを

      明示する。







    3.2.11 color	 RGB 値設定



	   color  <開始頂点番号> {Rn,Gn,Bn,An} [ {Rn+1,Gn+1,Bn+1,An+1} [...] ]





      オブジェクトの RGBA 値を指定する。line もしくは lstrip の場合、

      各頂点毎に RGBA値を指定する必要があるため、複数頂点分の指定が可能。



      これら以外の属性をもつオブジェクトの場合、RGBA 値はひとつ、もしくは

      0 (empty) であるため、開始頂点番号は無視され、最初に指定されている

      RGBA値が適用される。



    3.2.12 alpha        アルファブレンディング指定



	   alpha A B C D [fix]



      アルファブレンディングを有効にし、GS の ALPHA レジスタに指定する

      値を設定する。A,B,D には Cs,Cd,0 のうちのいずれかを指定し、C には

      As,Ad,FIX のいずれかを指定する。C に FIX を指定した場合、fix には

      ALPHA レジスタの FIX フィールドに指定する値を与える。

      

    3.2.13 pri		プライオリティ補正値



	   pri プライオリティ補正値





      プライオリティ補正値を指定する。



      基準となるプライオリティ値はレイアウトを使用するプログラムによって

      指定されるが、その値にここで指定されたプライオリティ補正値を加えた

      ものが、実際の描画プライオリティ値となる。



      プライオリティ値の結果が 7 を超過した場合、7として扱われる。







    3.2.14 magni	下位オブジェクト座標値係数設定



	   magni <表示係数>



      そのオブジェクトに従属する子オブジェクトや孫オブジェクトの座標値や

      表示サイズに、ここで指定した実数を乗算した値を用いる。



      ここで設定された値は、子孫となるすべてのオブジェクトに継承される。

      また、この値が設定されているオブジェクトそのものの座標値には影響を

      与えない。たとえば、下記のような関係を持つオブジェクトがあるとする。

      ()内は、各オブジェクトの座標値として設定されている値である。



	A(100, 100) -+-- B(20, 20)   -+-- D(10, 10)

		     |		      |

		     |		      +-- E(-5, -5)

		     |

		     +-- C(-10,-20)



      全てのオブジェクトの magni が 1.0 である場合、実際の表示座標は以下の

      ようになる。



	A (100, 100)

	B (120, 120)

	C ( 90,  80)

	D (130, 130)

	E (115, 115)



      ここで、A の magni に、0.5 を設定した場合、表示座標値は次のようになる。



	A (100, 100)

	B (110, 110)

	C ( 95,  90)

	D (115, 115)

	E (107.5, 107.5)



      この上、さらに B の magni に 0.5 を設定すると、B の子である D, E の

      座標値は、0.5(A) x 0.5(B) = 0.25 となり、実際の表示座標は以下のように

      なる。

      

	A (100, 100)

	B (110, 110)

	C ( 95,  90)

	D (112.5, 112.5)

	E (108.75, 108.75)



      座標値と同様、sprite や spin 属性の size 値もこの係数の影響を受ける。

      この係数は、ある一つのオブジェクトによって統括される一群のパーツの、

      見掛け上の形を崩さずに表示の大きさを変更したい場合に使用することを

      想定している。







    3.2.15 hide		非表示



	   hide



      オブジェクトを非表示状態にする。



      show 命令(3.2.16) とは排他的であり、一つの状態定義の中に hide と

      show が同時に存在してはならない。





    3.2.16 show		表示



	   show



      オブジェクトを表示状態にする。



      hide 命令(3.2.15) とは排他的であり、一つの状態定義の中に show と

      hide が同時に存在してはならない。







  3.3  アクション記述セクション



    3.3.1  action〜actend	アクション定義ブロック



	   action  "アクション名"



		   track



		     :



		   trend





		   track



		     :



		   trend

		 

		     :

  	   actend





      "アクション名" で参照されるアクションを定義する。

      action 〜 actend の間には、かならず track〜trend構文(3.3.2) のみが

      置かれ、それぞれの track〜trend 構文によって記述されるトラックが

      同時に実行される。



      全てのトラックの実行が終了すると、そのアクション全体の終了となる。

      なお、アクション中で操作されなかったオブジェクトはそれまでの状態を

      保持する。





    3.3.2  track〜trend		アクショントラック定義ブロック



	   track "オブジェクト名"



		[wait]

		[set]

		[morf]



	   trend



      "オブジェクト名" で指定されたオブジェクトの、時間軸に伴う変化を記述する。

      track〜trend の間は、wait(3.3.3), set(3.3.4), morf(3.3.5) が使用できる

      命令となる。









    3.3.3  wait			時間待ち



	   wait  <待ち時間>



      <待ち時間>で指定された時間だけ、何もせずに待機する。

      待ち時間は 1/300秒単位で指定する。





    3.3.4  set			状態設定



	   set <状態名>



      トラックの操作対象となっているオブジェクトを、<状態名>で指定された

      状態に、強制的に移行する。移行は瞬時に行われる。





    3.3.5  morf			補間変化



	   morf	<移行時間> <状態名>  [<回転方向>]



      トラックの操作対象となっているオブジェクトを、<移行時間>で指定された

      時間をかけて、<状態名> で指定された状態に直線補間で変化させる。



      <移行時間> は 1/300秒単位で指定する。



      トラックの操作対象となっているオブジェクトが spin 属性である場合、

      <回転方向> を指定することができる。回転方向に指定できるのは right 

      もしくは left であり、right であれば時計廻り、left であれば反時計

      廻りとなる。これを指定しなかった場合、デフォルトでは right と同じになる。







以上。

