カリング

■概要

カリングとは描画する必要がないポリゴンを描画しないようにする手法です。
この方法によって描画するポリゴン数が減少するので、高速化の手法としてよく使用されています。

●ポリゴンの裏表
	ポリゴンの表と裏の判断は頂点の並びが「時計回り」か「反時計回り」かで判断します。
	どちらを表とするかは設定で変更することが可能です。
	DirectX(左手系)は「時計回りを表」、OpenGL(右手系)は「反時計回りを表」となっています。
	gmpg_0096

●法線ベクトル
	ポリゴンが表か裏かは法線ベクトルが向いている方向になります。
	法線ベクトルは頂点の順番に従った2つのベクトルを利用して外積計算を行います。
	その結果として算出されたベクトルが法線ベクトルです。。
	gmpg_0099

■背面カリング

背面カリングはカリングの中で最も一般的とされているカリング方法です。
このカリングはカメラに対してポリゴンの表と裏を判断して描画の有無を判断します。
カメラや光に対してポリゴンが表を向いているかどうかの判断は
ポリゴンの向きベクトルとカメラや光の向きベクトルによって算出できます。
	
	gmpg_0097

内積の角度が鈍角ならば描画、鋭角ならば非描画と判断します。

●DirectX9
	DirectX9ではSetRenderStateを使用することで簡単に実行できます。
		
		SetRenderState(D3DRS_CULLMODE, カリングモード);

	・カリングモード
		DirectXのカリングモードの設定は以下の種類があります。
			D3DCULL_NONE => カリングなし
		 	D3DCULL_CW => 時計回りを裏面とする
			D3DCULL_CCW => 反時計回りを裏面とする

		※DirectXは左手系なので基本的にはD3DCULL_CCWが使用されています。

■視錐台カリング

視錐台カリングとはオブジェクトがカメラの視錐台の中に
あるかどうかで描画の有無を判断します。
DirectXではサポートされていないため実装するには各オブジェクトに
バウンディングスフィア(当たり判定用球)を作成し、
視錐台とバウンディングスフィアで当たり判定を行い、
当たっていれば描画、当たっていなければ非描画とします。

	gmpg_0098

■オクルージョンカリング

オクルージョンカリングとは不透明オブジェクトによって別オブジェクトが
隠される場合に、隠される側のオブジェクトを描画しないというものです。
この時の遮蔽物となるオブジェクトのことをオクルーダーと呼びます。

	gmpg_0093