////////// ccbl //////////////////////

Copyright (C) 1998, NINTENDO Co,Ltd.
Copyright (C) 1998, MONEGI CORPORATION.

このプログラムはNintendo64の機能ブロックであるRDPの
特にColorCombinerとBlenderの機能を簡便に学習するために
つくられました。

ccblは通常ではWindowsアプリであるdptestより起動されます。
作業経過のセーブやロードができないという機能制限が有りま
すが、通常のN64のアプリケーションとしてデバッグターゲットに
ダウンロードして動作させることができます。
また、フラッシュカートリッジに書き込んで動作させることも
できます。


<内容>

	ccbl操作方法
	各メニューの説明
	設定例
	その他 


//////// ccbl操作方法 ////////


[Ｎ６４コントローラ１]

○カメラ操作

・３Ｄスティック
	モデルの回転

・Ｚ＋３Ｄスティック ＵＰ ＤＯＷＮ

	カメラ位置の変更

○メニュー

・Ｒトリガー
	メニューのＯＮ／ＯＦＦ

・十字ボタン
	カーソルの移動

・Ａボタン
	次のウインドウを開く
	メニューの決定

・Ｂボタン
	ウインドウを閉じる

・Ｃボタンユニット
	パラメータの変更

	１６進表示のパラメータ(*_COLOR等変更)
	CL:	数値を１下げる
	CR:	数値を１上げる
	CU:	数値を０ｘ１０下げる
	CD:	数値を０ｘ１０上げる
	Ｌトリガー付
	LT+CL:	数値を最小にする
	LT+CR:	数値を最大にする

	１０進表示のパラメータ(FogPosition変更)
	CD:	指定された桁X１下げる
	CU:	指定された桁X１上げる

	ON/OFFパラメータの変更
	CD:	ON/OFF(O/x)パラメータを変更する


[Ｎ６４コントローラ２]

○Ｌトリガー *注)
	メニュー画面のダンプ
		メニュー画面のダンプをosSyncPrintf()します

○Ｒトリガー
	カバー値の可視化表示の切り替え
		RM_VISCVGを使いカバー値を可視化する

	参照>
		プログラミングマニュアル 15.7.11

○Ａボタン *注)
	設定パラメータをGBIマクロ形式(gSP*,gDP*)で
	osSyncPrintf()する
○Ｂボタン *注)
	設定パラメータをGBIマクロ形式(gsSP*,gsDP*)で
	osSyncPrintf()する

	注）
	make DPTEST=1 make FINAL=1で作られたものは
	対応していません

通常はコントローラを２つ使いますが１つでも
とりあえずの操作はできます


//////// 各メニューの説明 ////////

[RSP]

	RSP関連のパラメータを変更します

->GEO_MODE

	ジオメトリーモードを変更及び
	リフレクションマップの許可

	関連GBI>
		g*SPSetGeometryMode()

->LIGHT_COL
	
	ライトカラーを変更します
	ccblはN64で使える８個のライトをすべて使用しています。
	RSPの処理のスピードは若干違いますがライトのON/OFFは
	ライトカラーを黒(RGB=[0,0,0])にすることにより実現できます
	また、ライトのポジションは変更できません。

	各ライトのポジションと向きは
	
	DIF1:	カメラの位置から(0,0,0)へ
	DIF2:	(0,1,0)から(0,0,0)へ
	DIF3:	(1,0,0)から(0,0,0)へ
	DIF4:	(0,-1,0)から(0,0,0)へ
	DIF5:	(-1,0,0)から(0,0,0)へ
	DIF6:	(-1,1,1)から(0,0,0)へ
	DIF7:	X-Z平面上を(0,0,0)を中心にして円軌道を描いて
		公転しながら(0,0,0)へ
	AMB:	環境光です。モデル全体を照らします

	となっています。


	関連GBI>
		g*SPLightColor()
		g*SPLight()
		g*SPSetLights()

->FOG_POS

	フォグポジションを変更します
	g*SPFogPosition()の制限によりmin < maxとしなければ
	ならず、minがmaxを上回ったり、maxが下回ったりする設定は
	できません。(実際はmin != max であれば良い)

	関連GBI>
		g*SPFogPosition()

[RDP]

->CYCLE_TYPE

	RDPのサイクルタイプを変更します

	関連GBI>
		g*DPSetCycleType()

->CL_COMBINER

	カラーコンバイナに関連するパラメータを変更します

->CL_COMBINER->COMBINE_MD

	カラーコンバイナの設定を変更します
	サイクルタイプがG_CYC_1CYCLEの時は２サイクル目に
	関連するパラメータは変更できません。設定メニューの
	下の２行のフィールドはgbi.h内で定義されている、
	コンバインモードのマクロと同じものをすばやく設定
	するために設けられています。

	関連GBI>
		g*DPSetCombineMode()
		g*DPSetCombineLERP()
	注意）
	通常設定でパラメータを設定するとマクロ設定の
	表示が**** NO MACRO ****と表示されます。これは
	通常設定とマクロ設定の内容が違う可能性があると
	警告しているものです。あくまでもccblの仕様です

->CL_COMBINER->ENV_COLOR

	カラーコンバイナの入力ソースである、環境カラーを
	変更します。

	関連GBI>
		g*DPSetEnvColor()

->CL_COMBINER->PRIM_COLOR

	カラーコンバイナの入力ソースである、プリミティブカラーを
	変更します。

	関連GBI>
		g*DPSetPrimColor()

->BLENDER

	ブレンダ関連のパラメータを変更します

->BLENDER->RENDER_MODE

	レンダーモードの設定を変更します
	COMBINE_MDと同様にサイクルタイプがG_CYC_1CYCLEの時は
	２サイクル目に関連するパラメータは変更できません。
	設定メニューの下の２行のフィールドはgbi.h内で定義さ
	れている、レンダーモードのマクロと同じものをすばやく
	設定できます。


	関連GBI>
		g*DPSetRenderMode()

	注意）
	通常設定でパラメータを設定するとマクロ設定の
	表示が**** NO MACRO ****と表示されます。これは
	通常設定とマクロ設定の内容が違う可能性があると
	警告しているものです。あくまでもccblの仕様です

	また同様にccblの仕様上、RM_G_*_PCL_SURFの設定時に
	アルファコンペアの設定がRENDER MODEで行われません。
	詳しくは設定例のパーティクル効果の項を参照してください。

->BLENDER->BL_COLOR

	ブレンダの入力ソースである、ブレンドカラーを
	変更します

	関連GBI>
		g*DPSetBlendColor()

->BLENDER->FOG_COLOR

	ブレンダの入力ソースである、フォグカラーを
	変更します

	関連GBI>
		g*DPSetFogColor()
	
->BLENDER->CD AD AC

	カラーディザ、アルファーディザ、アルファーコンペアの
	設定を変更します

	関連GBI>
		g*DPSetColorDither()
		g*DPSetAlphaDither()
		g*DPSetAlphaCompare()

->TEX_FILTER

	テクスチャフィルタの設定を変更します

	関連GBI>
		g*DPSetTextureFilter()

[VI]
	VI関連のパラメータを変更します

->SPECIAL FEATURES

	VIのガンマ補正、ガンマディザ、ディボットフィルタ、
	ディザフィルタの設定を変更します
	これらのパラメータはカラーコンバイナやブレンダとは
	直接関係有りませんが、N64の画面表示に大きく関わってくる
	パラメータであるため、ccblでも変更ができるようにしました。
	ただしVI自体は全く独立しているものでありません。ブレンダが
	フレームバッファに書き込んだピクセル値をN64がそのまま表示して
	いるわけではなくVIがカラー値やカバー値を元に最終カラーを作り
	表示しているので表示に関してVIを全く無視することはできません。

	関連GBI>
		osViSetSpecialFeatures()

[MISC]
	その他の設定をします

->MODEL
	表示モデルを変更します

	<各モデルの説明>
	TETRA	->	正四面体(三角錐)
	CUBE	->	立方体
	SPHERE	->	球
	XY-YZ	->	XY平面とYZ平面を組合わせたもの
	MOUNTAIN ->	地形風
	TRIANGLE ->	１トライアングル
	   A	->	アルファベットのＡ
	MIZO	->	溝がある地形
	TORUS2	->	ドーナツを２つ組み合わせたもの

->TEXTURE
	モデルに張るテクスチャーを変更します

	<各テクスチャの説明>
	RGBA16 MARIO	$(ROOT)/usr/src/PR/demos/Texture/にある
			mario.rgbです
			アルファは１です

	RGBA16 TREE	抜きのためのアルファを持っています
			RGBイメージより少し小さめの大きさの
			アルファ値でマスクされています

	RGBA16 BRICK	$(ROOT)/usr/src/PR/demos/Texture/にある
			brick.rgbです

	RGBA16 CHECKER	抜きのアルファを持っています
			RGBイメージの白い部分にアルファ値に１を
			黒い部分のアルファ値を０にしてあります

	RGBA16 BRICK_MM	ミップマップテクスチャを考慮したものです
			全部で６レベルのミッブマップテクスチャを
			持っています。このテクスチャ以外では、
			トライリニアミップマップが正しく表現でき
			ません

	RGBA32 GRADIENT	アルファチャンネルが8ビットのテクスチャです

	IA16 GRADIENT	インテンシティ、アルファとも8ビットの
			テクスチャです。中央付近に*ごみ*が
			有ります。

	RGBA16 REFLECT	鏡面環境マップをシミュレートしたものです
			主にリフレクションマップに使います
			アルファ値がすべて0になっているので
			注意してください

	I8 HIGHLIGHT	スペキュラハイライト風のテクスチャです
			ccblではスペキュラハイライトはサポート
			していませんが反射マッピングを利用して
			あくまでも*擬似的*にスペキュラハイライトを
			表示してみることができます。

	<テクスチャのタイプとロードについて>

	テクスチャはBRICK_MMを除きすべて３２ｘ３２ピクセルの
	イメージです。gDPTextureLoadblock()でテクスチャメモリに
	転送され、タイル０に設定されます。またテクスチャの繰り返しは
	s t 共にG_TX_WRAP(繰り返し)に設定されます。

	gSPTexture()の設定はBRICK_MMを除き
		gSPTexture(glistp++,0x8000, 0x8000, 0, \
			            G_TX_RENDERTILE, G_ON);  
	と設定されています。
	BRICK_MMを指定したときは
		gSPTexture(glistp++,0x8000, 0x8000, 5, \
			           G_TX_RENDERTILE, G_ON);	
	を設定しています
	ただし、リフレクションマップを許可したときは
		 gSPTexture(glistp++,(32<<6),(32 <<6), 0, \
				     G_TX_RENDERTILE, G_ON);	
	に、強制的に設定されます

->BG_COLOR

	バックグラウンドのカラーを変更します。
	実際はフレームバッファをクリアするときに
	指定したカラーを書き込んでいます。
	IMAGE1,2を指定したときはカラー値ではなく
	16BitRGBAフォーマットのイメージをコピーして
	フレームバッファをクリアしています

->BG_MODEL
	ccblのパラメータに影響されない、モデルを表示します
	レンダーモードはG_RM_AA_ZB_OPA_SURFを使用しています

	<各モデルの説明>

	DISABELE
		BGモデルの表示を禁止します
	PLANE
		単なる平面です
		主にG_RM_*_DECALやG_RM_*_INTERの表示時に
		使います
	STARS
		星形のモデルを９個配置しています
		表示モデルとの重なり具合いを見るのに使います


//////// 設定例 ////////


特に説明がない限り１サイクルモードで設定します
特に指示のないパラメータは立ち上げ時の値を使用します
ccbl上で効果を見るために必ず必要な設定には*がついています

＜プリミティブカラー＞
    プリミティブカラーを使ってオブジェクトを表示します

    コンバインモードをPRIMITIVEに設定します*

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: PRIMITIVE

    プリミティブカラーを変更してみてください

          [RDP]->CL_COMBINE->PRIM_COLOR


＜テクスチャデカール＞
	テクセルカラーをそのまま適用します

    コンバインモードをDECALRGBに設定します*

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: DECALRGB


＜ライティング＞
    ライトを使った表示をします

    ジオメトリモードを設定します

	[RSP]->GEO_MODEを以下のようにします

       +[GEO_MODE]---------+        
       | G_SHADE         :O|*        
       | G_LIGHTING      :O|*        
       | G_SHADING_SMOOTH:O|*        
       | G_ZBUFFER       :O|*        
       | G_TEXTURE_GEN   :x|        
       | G_TEXTURE_GEN_L :x|        
       |>G_CULL_FRONT    <x|        
       | G_CULL_BACK     :O|        
       | G_FOG           :x|        
       |- - - - - - - - - -|        
       |  REFLECTION EN  :x|        
       +-------------------+        

    コンバインモードを次のようにします*

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: SHADE

    ライトカラーを変更してみてください

	[RSP]->LIGHT_COL
	
    コンバインモードにMODULATERGBを使用すると
    テクスチャーを張ったオブジェクトにライトを
    適用することができます。この時、明るめの
    テクスチャ(MARIOやBRICK)を使った方が効果を
    より確認しやすいです

＜リフレクションマップ＞
    反射マッピングを行います

    ジオメトリモードを設定します
	[RSP]->GEO_MODEを以下のようにします

       +[GEO_MODE]---------+        
       | G_SHADE         :O|*        
       | G_LIGHTING      :O|*        
       | G_SHADING_SMOOTH:O|*        
       | G_ZBUFFER       :O|*        
       | G_TEXTURE_GEN   :O|*        
       | G_TEXTURE_GEN_L :x|        
       | G_CULL_FRONT    :x|        
       | G_CULL_BACK     :O|        
       | G_FOG           :x|        
       |- - - - - - - - - -|        
       |> REFLECTION EN  <O|*        
       +-------------------+        
 
    コンバインモードを次のようにします*

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: DECALRGB

    注意：
    実際にはccblでの設定だけでは行えず、反射マッピングが
    許可されると足りない設定を内部的に行っています

＜スペキュラハイライト＞
    反射マッピングを使いスペキュラハイライトを
    シミュレートします

     効果を分かりやすくするためにモデルにTORUS2を使用します

     テクスチャはIA8 HIGHLIGHTを選んでください

    ジオメトリーモードをリフレクションマップと同じ
    設定にします*

    反射マッピングを使っているためライトは視点の位置に
    あると仮定します。そのためDIF1のみ使用します。
    ライトカラーを以下のように設定します*

           +[LIGHT COLOR]--+        
           |      R  G  B  |        
           |DIF1: 50 50>00<|        
           |DIF2: 00 00 00 |        
           |DIF3: 00 00 00 |        
           |DIF4: 00 00 00 |        
           |DIF5: 00 00 00 |        
           |DIF6: 00 00 00 |        
           |DIF7: 00 00 00 |        
           |AMB : 00 00 00 |        
           +---------------+        

    コンバインモードを次のようにします*

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: HILIGHTRGB

    プリミティブカラーをライトカラーと同じ色で設定します*
 
            +[PRIM COL]-+           
            | RED  : FF |           
            | GREEN: FF |           
            | BLUE : 00 |           
            |<ALPHA> 80 |           
            |- - - - - -|           
            | MIN  : 80 |           
            | LOD  : 80 |           
            +-----------+           
	    プリミティブカラーがハイライトのカラーになります

    注意:
    あくまでも反射マッピングを使って擬似的に表現しています
    正しい設定例はプログラミングマニュアルを参照してください

＜フォグ＞
    フォグを使用します

    ジオメトリモードを設定します
	[RSP]->GEO_MODEを以下のようにします

       +[GEO_MODE]---------+        
       | G_SHADE         :O|*        
       | G_LIGHTING      :O|*        
       | G_SHADING_SMOOTH:O|        
       | G_ZBUFFER       :O|*        
       | G_TEXTURE_GEN   :x|        
       | G_TEXTURE_GEN_L :x|        
       | G_CULL_FRONT    :x|        
       | G_CULL_BACK     :x|        
       | G_FOG           :O|*        
       |- - - - - - - - - -|        
       |> REFLECTION EN  <x|        
       +-------------------+        
 
    サイクルタイプを２サイクルにします*

        [RDP]->CYCLE_TYPE->G_CYC_2CYCLE


    効果を分かりやすくするためにコンバインモードは
    DECALRGBをモデルにはCUBEをテクスチャにはBRICKを
    選んでください。またコンバインモードには次の値を
    設定してください。

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: DECALRGB
         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: PASS2


    レンダーモードを設定します*

	[RDP]->BLENDER->RENDER_MODE->CYCLE1: FOG_SHADE_A
	[RDP]->BLENDER->RENDER_MODE->CYCLE2: AA_ZB_OPA_SURF2


    フォグカラーを選ぶ*

	[RDP]->BLENDER->FOG_COLORを以下のようにします

           +[FOG COL]--+            
           |<RED  > 80 |            
           | GREEN: 80 |            
           | BLUE : 80 |            
           | ALPHA: 80 |            
           +-----------+            

    ＢＧカラーをフォグカラーに近いものにする

	[MISC]->BG_COLOR->GLAY  
	

    フォグポジション([RSP]->FOG_POS)を変えることにより
    フォグのかかり始めやフォグカラーで飽和する位置を
    変えることができます


＜トライリニアミップマップ＞

    サイクルタイプを２サイクルにします*

        [RDP]->CYCLE_TYPE->G_CYC_2CYCLE

    コンバインモードを設定します*

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: TRILERP
         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: DECALRGB2

    レンダーモードを設定します*

	[RDP]->BLENDER->RENDER_MODE->CYCLE1: PASS
	[RDP]->BLENDER->RENDER_MODE->CYCLE2: AA_ZB_OPA_SURF2

    テクスチャを設定します*

	[MISC]->TEXTURE->RGBA16 BRICK_MM

    注意：
    テクスチャーにBRICK_MMを使用したときはccblが内部的に
    テクスチャタイルの設定を行っています


＜アンチエイリアスについて＞

    N64はアンチエリアスを最終的に実行するのはVIですが
    そのための情報(カバー値)をブレンダがフレームバッファに
    ピクセル値を書き込むときにいっしょに書き込みます。
    ccblではG_RM_VISCVGのレンダーモードを使い、カバー値を
    可視化してみることが出来ます。この機能を使いブレンダの
    設定をかえてカバー値がどのように生成されるか見てください
    興味深いことが多数発見されるでしょう

＜透明サーフェス＞

    コンバインモードを以下のようにします*

         [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: PRIM

    レンダーモードを以下のように設定します*

	[RDP]->BLENDER->RENDER_MODE->CYCLE1: AA_ZB_XLU_SURF

    効果が分かりやすいようにBG_COLORを変更します

	[MISC]->BG_COLOR->IMAGE2

    プリミティブカラーのアルファ値を変更してみて下さい

	[RDP]->CL_COMBINER->PRIM_COLOR->ALPHA

＜テクスチャーエッジモード＞

   モデルとテクスチャを以下のように設定します

	[MISC]->MODEL->CUBE
	[MISC]->TEXTURE->RGBA16 TREE

    コンバインモードを以下のように設定します*

        [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: DECALRGBA

    レンダーモードを以下のように設定します*

	[RDP]->BLENDER->RENDER_MODE->CYCLE1: AA_ZB_TEX_EDGE
	
＜デカールサーフェス＞

    モデルを以下のように設定します*

	[MISC]->MODEL->TRIANGLE

     レンダーモードを以下のように設定します*

	[RDP]->BLENDER->RENDER_MODE->CYCLE1: AA_ZB_OPA_DECAL

     ＢＧモデルを以下のように設定します*

	[MISC]->BG_MODEL->PLANE


＜相互貫入モード＞

    モデルを以下のように設定します*

	[MISC]->MODEL->TETRA

     レンダーモードを以下のように設定します*

	[RDP]->BLENDER->RENDER_MODE->CYCLE1: AA_ZB_OPA_INTER

     ＢＧモデルを以下のように設定します*

	[MISC]->BG_MODEL->PLANE

     カバー値を可視化してレンダーモードがAA_ZB_OPA_SURFとの
     カバー値の違いを見てみてください

＜パーティクル効果＞

     何らかのアルファ値が必要なのでコンバインモードを
     以下のように設定します*

        [RDP]->CL_COMBINE->COMBINE_MODE->CYCLE1: MODULATEI_PRIM


     レンダーモードを以下のように設定します*

	[RDP]->BLENDER->RENDER_MODE->CYCLE1: AA_ZB_PCL_SURF

     アルファコンペアを以下のように設定します*

	[RDP]->BLENDER->CD AD AC->G_AC_DITHER

     注意：
     PR/gbi.hのマクロではG_RM_*_PCL_SURFを設定すると
     自動的にアルファーコンペアも設定されますが
     ccblの仕様上RENDER_MODEではアルファコンペアを同時に
     設定することができませんので必ずアルファコンペアを
     必ず指定してください。

     実際のプログラミングでありがちなのはレンダーモードを
     設定してからアルファーコンペアを設定しているとレンダー
     モードにG_RM_*_PCL_SURFを指定していてもその後のアルファ
     コンペアの設定で上書きされてしまい、バグの原因となります

//////// その他 ////////


・メニューのレンダーモード

	メニューのレンダーモードにはG_RM_XLU_SURFを使用しています
	このモードはCVG_DIST_FULLを設定しているため表示モデルの
        カバー値を乱す可能性があります。正しい表示を見るには
	メニュー表示をOFFにしてください

・near far クリップ値

	ccblではnearクリップ値に500、farクリップ値に20000を
	設定しています。この値は特に推奨される値ではありません
	アプリケーションによって最適な値を選択されるべきです

・サポートしていないコンバインモード

	以下のコンバインモードのマクロ設定はサポート
	されていません。またこれらに関わるパラメータの
	設定も省かれています。カラーコンバイナのパラメー
	タを直接設定することは出来ます

		G_CC_TEMPLERP
		G_CC_1CYUV2RGB
		G_CC_YUV2RGB
		G_CC_CHROMA_KEY2

・パフォーマンスメータについて

	パフォーマンスメータにNuSystemのnuDebTaskPerfBar1()を
	使用しています。パフォーマンスメータについては
	NuSysytemのドキュメントを参照してください
	また、モデルの表示の時間だけではなくフレームバッファの
	クリアやメニュー表示等の時間も含まれています
	
・ccblでは設定できないパラメータについて

	ccblではカラーコンバイナとブレンダには
	あまり関係ないものは設定が出来ません。
	実際のアプリケーション開発ではccblで設定できる
	パラメータを設定するだけではうまく表示は
	行われません。各種ドキュメントやサンプルソースを
	参照してください

