タグのDirectX DirectXの下のブログは主に、メインの参照学習過程を記録するために使用されている「DirectXの12の3Dゲームの戦闘の開発を。」
コンピュータの色の基礎
色表現
大部分は混合色でありながら、人間の目は単色光の大半は、赤、緑、青の光に分けることができるが、これら3色の異なる割合で製造することができ、赤、緑、青の光に最も敏感ですこれは色度ある光原理の三原色(三原色と色として知られている通常、赤、緑、青区別する三原色)。
ホログラフィック・ディスプレイの色は、ディスプレイに表示される、すなわち色は、三原色の原理に基づいています。この原理に基づいて、それを描くことができます。
- 性質は、三比例している原色の任意の光であってもよい(ブレンド)を混合一緒。
- 色は、他の2つの光の色によって表すことができないそれらのいずれも互いに独立三原色、。
- 得られた混合光の色の飽和度(彩度)は、実施例3の光の色によって決定され、混色、輝度(明るさ)、輝度関与し、混合色光。
光が混合三原色のように表すことができるので、光がR、G、Bは赤、緑、青の光の色の強度である3次元ベクトル(R、G、B)によって定量することができます。説明の便宜上、光の強度、値の区間[0,1]に、我々は、通常、量子化された光は、0は強度、最大強度ではありません。これは、RGBカラーモデルとして知られている色に基づいた方法のように表されます。
基本的な混色
光の色の混合によって光の2つの種類、すなわち、光の色を混合することは、新しい色を得ます。(以下の図は、三原色を混合することによって得られる最大強度は図混合幾何示します)
ここで、光の理論をミキシング:
- 赤+緑=黄、赤+青=マゼンタ、緑+青=シアン、赤+緑+青=白
- 得られたカラーリング二つの色の補色と交差する直線の中心を通るカラーホイールで、カラーホイール
量子化後、我々は定量的データ表現のミックスを定義しなければならないので、光混色が現実ではなく、コンピュータで直感的です。光混色がベクトル演算によって達成することができます。我々は、リスクする必要があるときに色演算処理が正常に可能な範囲を超えてもよいクランプ(クランプに)操作の成分、すなわち、いわゆるクランプ値が1.0より大きい場合、成分が1.0に設定され、値0.0未満0.0に設定されています。
添加剤の混合
\ [(0.0,0.5,0.0)+(0.0,0.0,0.25)=(0.0,0.5,0.25)\]
意味の種類:緑と低強度の適度な強度ブルーミックスは暗緑色になります。一般的にRGBモードを混合添加剤を使用します。
減算混合
\ [(1.0,1.0,1.0) - (1.0,1.0,0.0)=(0.0,0.0,1.0)\]
式の意味:マイナス白い部分から赤と緑は青になります。混合は、一般的に減算CMYKモードで使用されています。
スカラー
\ [0.5 \回(1.0,1.0,1.0)=(0.5,0.5,0.5)\]
式の意味:個々の成分は、白灰色の半分を取られるが、中程度の強度であろう。
式の構成要素(変調)
式のカラーベクトル成分、排他的なベクトルアルゴリズムであるように定義される:
[\ bigotimes(R_2、G_2、B_2)(R_1、G_1、B_1)=(r_1r_2、g_1g_2、b_1b_2)\] \
成分は、主に照明計算式に使用されます。式を理解することができる:そこ色仮定\((R_1、G_1、B_1 )\) の入射光をに照射される反射(R_2の\回100%\) \ 、赤色光\(G_2 \タイムズ100%\)緑色光、\(B_2 \ 100%タイムズ\)青色光と表面に残留の光を吸収し、その後、結果は、反射光の色について計算します。
透明度
実際に、我々は、4次元のベクトルに対して主に使用される通常色ベクトル、これはSIMD加速を再生するだけではなく、なぜなら四次元の色成分のハイブリッド・コンピューティングにおける非常に重要な値を表すために使用される:不透明度( 不透明度)。このコンポーネントは一般に呼ばれるアルファ成分の値は区間[0,1]にあります、。
DirectXの色と関連する関数
色は4次元ベクトルであるため、それはまたのDirectXライブラリーによって提供DirectXMath使用することができるXMVECTOR
種類の色を表します。
成分計算式
XMVECTOR XM_CALLCONV XMColorModulate(FXMVECTOR C1, FXMVECTOR C2);
32ビットカラー
32ビット色と128色:DirectXに含まれる、色種データは、2つのサイズで一般的に利用可能です。次のように32ビットの色が定義されます。
namespace DirectX {
namespace PackedVector {
struct XMCOLOR {
union {
struct {
uint8_t b;
uint8_t g;
uint8_t r;
uint8_t a;
};
uint32_t c;
};
XMCOLOR() {}
XMCOLOR(uint32_t Color) : c(Color) {}
XMCOLOR(float _r, float _g, float _b, float _a);
explicit XMCOLOR(_In_reads_(4) const float *pArray);
operator uint32_t () const { return c; }
XMCOLOR& operator=(const XMCOLOR& Color) { c = Color.c; return *this; }
XMCOLOR& operator=(const uint32_t Color) { c = Color; return *this; }
};
}
}
見ることができる、DirectXMathは、32ビットの色に格納されたライブラリはunsigned int
、減少のビットは8ビットの符号なしの数の両方を示し、R、G、Bの色成分、各成分、すなわち、強度を表します範囲[0,255]に間隔整数。
128色
128カラー記録色、すなわち、各成分が使用され、最も直感的な方法であるfloat
図。
ビットカラー変換
範囲の整数[0,255]は[0,1] 128色に32ビットの色に変換することができる実際の間隔にマッピングされます。具体的なアプローチは単純である:各コンポーネント255によって分割することができます。
カラー128カラー精度は非常に高いので、高精度の利点は、計算誤差を低減するために、それは、多くの場合、ピクセルシェーダの画素の色を計算するために使用されます。表示装置だけでなく、色の高い精度を反映するために十分なので、計算後、計算結果は、多くの場合、32ビットカラーに格納されています。すなわち:色ロードおよびストアは、実際にはビット記憶構造と色変換です。この目的のために、ライブラリーは、対応するロード/ストア(また、ビット色変換とも呼ばれる)機能を提供します
XMVECTOR XM_CALLCONV PackedVector::XMLoadColor(const XMCOLOR* pSource);
void XM_CALLCONV PackedVector::XMStoreColor(XMCOLOR* pDestination, FXMVECTOR V);