DX 9を使った3 Dゲームプログラミング入門-part.2 Direct 3 D基礎第6章
4427 ワード
第6章テクスチャ
テクスチャマッピングは、林地データを三角形にマッピングするテクニックであり、シーンの繊細さとリアリティを大幅に向上させます.
D 3 Dでは、IDirect 3 DDTtore 9インタフェースを使用してテクスチャを表します.テクスチャはピクセルのマトリクスで、表面と似ていますが、三角形に埋め込むことができます.
6.1テクスチャ座標
D 3 Dは、水平方向に垂直なu軸と垂直方向に垂直なv軸からなるテクスチャ座標系を用いる.U、V座標系は、テクスチャと呼ばれるテクスチャ要素を表し、v軸は下方向である.
座標間隔は[0,1]に正規化されていることに注意してください.これは、異なるサイズのテクスチャをD 3 Dに使用できるようにするためです.テクスチャにマッピングする三角形領域を3 D三角形ごとに定義する必要があります.
この手順を完了するには、テクスチャ上のテクスチャを定義するために、テクスチャ構造体にテクスチャ座標のペアを追加する必要があります.
struct Vertex
{
...//既存と同じ
float _u,_v;//テクスチャ座標(Texture Coordinates)
};
const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;
BUTEXフォーマット技術にD 3 DFVFTEX 1を追加し、BUTEX構造体が一対のテクスチャ座標を含むことを指定します.
この3つのテクスチャオブジェクトから作成される三角形も、テクスチャ座標内のテクスチャ三角形として定義されます.
テクスチャデータは、通常、ディスクに格納された画像ファイルから読み出され、IDirect 3 DDTtore 9オブジェクトにロードされます.次のD 3 DX関数を使用します.
HRESULT D3DXCreateTextureFromFile (
LPDIRECT 3 DDEVICE 9 pDevice//テクスチャを作成するデバイス
LPCSTR pSrcFile,//画像を取得するファイル名
LPDIRECT 3 DTEXTURE 9*ppTexture//作成したテクスチャのポインタを受信
);
この関数は、さまざまな異機種ファイルフォーマットを取得できます.
例えば、石垣.bmpという名前のファイルにテクスチャを作成する場合は、次のコードを記述します.
IDirect3Dtexture9* _stonewall;
D3DXCreateTextureFromFile(_device,"stonewall.bmp",&_stonewall);
現在のテクスチャを次の方法で指定します.
HRESULT IDirect3DDevice9::SetTexture(
テクスチャをDWORD Stage/0~7の範囲の値に指定します.
IDirect 3 DBAseTexture 9*pTexture//保存するテクスチャのポインタ
);
Device->SetTexture(0,_stonewall);
-NOTE-
3 Dでは、最大8つのテクスチャを組み合わせてより詳細な画像を作成できます.この技術をマルチテクスチャ処理と呼ぶ.この本では、パート4までマルチテクスチャ処理を使用していなかったので、0を加えます.
特定のテクスチャ状態でテクスチャを使用したくない場合は、pTextureを0に指定します.
Device->SetTextur(0,0)
rederObjectWithoutTexture();
6.3フィルター
これを前提に、このテクスチャはスクリーン空間で3つの格子型です.一般的に、テクスチャとスクリーンの三角形のサイズは異なります.テクスチャ三角形を拡大または縮小して、スクリーン三角形に揃えます.このとき生じる歪みはフィルタリングにより減少し,柔らかい画像を形成する.
D 3 Dは3種類のフィルタを提供し、各フィルタは異なるレベルの品質を提供する.泡の質が高いほど、速度が遅くなります.テクスチャフィルタを指定するには、IDirect 3 Ddevice 9::SetSamplerStateを使用します.
*近点サンプリング-差分濾過を採用し、最低のDOWN速度UP
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_POINT);
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT);
*線形フィルタリング-現在のハードウェアのパフォーマンスが高い品質を考慮すると、実行速度も速くなります.通常推奨フィルタ
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
*非等方性濾過-非等方性濾過は最高品質の結果をもたらすが、実行速度も最も遅い.
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC);
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);
非等方性フィルタを使用する場合は、品質を決定するD 3 DSAMP MAXANISO TROPYレベルを指定する必要があります.高い値=高品質
Device -> SetSamplerState(0,D3DSAMP,MAXANISOTROPY,4);
6.4マッピングが嫌い
スクリーン上の三角形は、通常、テクスチャ三角形とは大きさが異なります.テクスチャサイズの急激な変化を防止することによって、テクスチャの嫌な図を作成する方法があります.これは、詳細を保持しながら、複数の小さな解像度でテクスチャを作成する方法です.
ここで、各マップが前の嫌いなマップの半分のサイズであることを確認します.
6.4.1マップフィルタが嫌い
「マッピングが嫌い」フィルタを指定して、D 3 Dが「マッピングが嫌い」をどのように使用するかを決定できます.
Device->SetSamplerState(0,D3DSAMP_MIPFILTER,Filter);
「≪フィルタ|Filter|emdw≫」セクションには、次のいずれかのオプションがあります.
D 3 DTEXF NONEを使用しない-マッピングが嫌いです.
D 3 DTEXF POINT-このフィルタを使用すると、Direct 3 Dは画面の三角形のサイズに最も近い嫌いなマップレベルを選択します.レベルが選択されると、指定したminラベルとmagラベルに基づいて選択したレベルがフィルタされます.
*D 3 DTEXF LINEAR-このフィルタを使用すると、Direct 3 Dは、minフィルタとmagフィルタに基づくフィルタを最も類似した2つの嫌マップレベルに適用します.すなわち、線形の組み合わせの2つのレベルで最終画素色を計算します.
6.4.2 D 3 Dでの嫌いマップの使用
D 3 Dで嫌な図を使うのは簡単です.デバイスが「マッピング嫌い」をサポートしている場合、D 3 DXCreateTexture FromFileを使用して「マッピング嫌い」チェーンを自動的に生成できます.また、D 3 Dは画面の三角形に最適な嫌なマップを自動的に選択します.すなわち,構成と使用に必要なほとんどのプロセスは自動的に処理される.
6.5アドレスモード
テクスチャ座標の範囲は[0,1]とは限らず、範囲外の場合があります.xを超えるテクスチャ座標の処理方法は、D 3 Dアドレスモードによって定義される.アドレスモードはwrap、border color、clamp、mirrorの4種類があります.
これらの図の矩形では、テクスチャ座標は[0,3]と表され、33領域マトリクスで矩形を分割することができ、55が必要であればwrapアドレスモードとして指定し、テクスチャ座標[0,5]で指定することができる.
Device->SetSampler State()関数でアドレスモードを指定できます.
サマリ
テクスチャ座標は、3 D三角形にマッピングされるテクスチャ三角形を定義します.
D 3 DXCreateTexture FromFile関数を使用して、テクスチャに保存されているイメージファイルからテクスチャを作成できます.
テクスチャフィルタを指定するには、マップフィルタのサンプル状態をスケール、拡大、および嫌いにすることができます.
アドレスモードでは、[0,1]の範囲を超えるテクスチャ座標の処理方法を指定できます.たとえば、テクスチャのタイリング、反射、制限などの処理を行うことができます.
テクスチャマッピングは、林地データを三角形にマッピングするテクニックであり、シーンの繊細さとリアリティを大幅に向上させます.
D 3 Dでは、IDirect 3 DDTtore 9インタフェースを使用してテクスチャを表します.テクスチャはピクセルのマトリクスで、表面と似ていますが、三角形に埋め込むことができます.
6.1テクスチャ座標
D 3 Dは、水平方向に垂直なu軸と垂直方向に垂直なv軸からなるテクスチャ座標系を用いる.U、V座標系は、テクスチャと呼ばれるテクスチャ要素を表し、v軸は下方向である.
座標間隔は[0,1]に正規化されていることに注意してください.これは、異なるサイズのテクスチャをD 3 Dに使用できるようにするためです.テクスチャにマッピングする三角形領域を3 D三角形ごとに定義する必要があります.
この手順を完了するには、テクスチャ上のテクスチャを定義するために、テクスチャ構造体にテクスチャ座標のペアを追加する必要があります.
struct Vertex
{
...//既存と同じ
float _u,_v;//テクスチャ座標(Texture Coordinates)
};
const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;
BUTEXフォーマット技術にD 3 DFVFTEX 1を追加し、BUTEX構造体が一対のテクスチャ座標を含むことを指定します.
この3つのテクスチャオブジェクトから作成される三角形も、テクスチャ座標内のテクスチャ三角形として定義されます.
-NOTE-
대응되는 텍스처 삼각형을 3D 삼각형으로 지정하기는 했지만 3D삼각형을 스크린 스페이스로 변환하는 래스터라이즈 단계 전까지는 텍스처가 입혀지지 않는다.
6.2テクスチャの作成とアクティブ化テクスチャデータは、通常、ディスクに格納された画像ファイルから読み出され、IDirect 3 DDTtore 9オブジェクトにロードされます.次のD 3 DX関数を使用します.
HRESULT D3DXCreateTextureFromFile (
LPDIRECT 3 DDEVICE 9 pDevice//テクスチャを作成するデバイス
LPCSTR pSrcFile,//画像を取得するファイル名
LPDIRECT 3 DTEXTURE 9*ppTexture//作成したテクスチャのポインタを受信
);
この関数は、さまざまな異機種ファイルフォーマットを取得できます.
例えば、石垣.bmpという名前のファイルにテクスチャを作成する場合は、次のコードを記述します.
IDirect3Dtexture9* _stonewall;
D3DXCreateTextureFromFile(_device,"stonewall.bmp",&_stonewall);
現在のテクスチャを次の方法で指定します.
HRESULT IDirect3DDevice9::SetTexture(
テクスチャをDWORD Stage/0~7の範囲の値に指定します.
IDirect 3 DBAseTexture 9*pTexture//保存するテクスチャのポインタ
);
Device->SetTexture(0,_stonewall);
-NOTE-
3 Dでは、最大8つのテクスチャを組み合わせてより詳細な画像を作成できます.この技術をマルチテクスチャ処理と呼ぶ.この本では、パート4までマルチテクスチャ処理を使用していなかったので、0を加えます.
特定のテクスチャ状態でテクスチャを使用したくない場合は、pTextureを0に指定します.
Device->SetTextur(0,0)
rederObjectWithoutTexture();
6.3フィルター
これを前提に、このテクスチャはスクリーン空間で3つの格子型です.一般的に、テクスチャとスクリーンの三角形のサイズは異なります.テクスチャ三角形を拡大または縮小して、スクリーン三角形に揃えます.このとき生じる歪みはフィルタリングにより減少し,柔らかい画像を形成する.
D 3 Dは3種類のフィルタを提供し、各フィルタは異なるレベルの品質を提供する.泡の質が高いほど、速度が遅くなります.テクスチャフィルタを指定するには、IDirect 3 Ddevice 9::SetSamplerStateを使用します.
*近点サンプリング-差分濾過を採用し、最低のDOWN速度UP
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_POINT);
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT);
*線形フィルタリング-現在のハードウェアのパフォーマンスが高い品質を考慮すると、実行速度も速くなります.通常推奨フィルタ
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
*非等方性濾過-非等方性濾過は最高品質の結果をもたらすが、実行速度も最も遅い.
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC);
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);
非等方性フィルタを使用する場合は、品質を決定するD 3 DSAMP MAXANISO TROPYレベルを指定する必要があります.高い値=高品質
Device -> SetSamplerState(0,D3DSAMP,MAXANISOTROPY,4);
6.4マッピングが嫌い
スクリーン上の三角形は、通常、テクスチャ三角形とは大きさが異なります.テクスチャサイズの急激な変化を防止することによって、テクスチャの嫌な図を作成する方法があります.これは、詳細を保持しながら、複数の小さな解像度でテクスチャを作成する方法です.
ここで、各マップが前の嫌いなマップの半分のサイズであることを確認します.
6.4.1マップフィルタが嫌い
「マッピングが嫌い」フィルタを指定して、D 3 Dが「マッピングが嫌い」をどのように使用するかを決定できます.
Device->SetSamplerState(0,D3DSAMP_MIPFILTER,Filter);
「≪フィルタ|Filter|emdw≫」セクションには、次のいずれかのオプションがあります.
D 3 DTEXF NONEを使用しない-マッピングが嫌いです.
D 3 DTEXF POINT-このフィルタを使用すると、Direct 3 Dは画面の三角形のサイズに最も近い嫌いなマップレベルを選択します.レベルが選択されると、指定したminラベルとmagラベルに基づいて選択したレベルがフィルタされます.
*D 3 DTEXF LINEAR-このフィルタを使用すると、Direct 3 Dは、minフィルタとmagフィルタに基づくフィルタを最も類似した2つの嫌マップレベルに適用します.すなわち、線形の組み合わせの2つのレベルで最終画素色を計算します.
6.4.2 D 3 Dでの嫌いマップの使用
D 3 Dで嫌な図を使うのは簡単です.デバイスが「マッピング嫌い」をサポートしている場合、D 3 DXCreateTexture FromFileを使用して「マッピング嫌い」チェーンを自動的に生成できます.また、D 3 Dは画面の三角形に最適な嫌なマップを自動的に選択します.すなわち,構成と使用に必要なほとんどのプロセスは自動的に処理される.
6.5アドレスモード
テクスチャ座標の範囲は[0,1]とは限らず、範囲外の場合があります.xを超えるテクスチャ座標の処理方法は、D 3 Dアドレスモードによって定義される.アドレスモードはwrap、border color、clamp、mirrorの4種類があります.
これらの図の矩形では、テクスチャ座標は[0,3]と表され、33領域マトリクスで矩形を分割することができ、55が必要であればwrapアドレスモードとして指定し、テクスチャ座標[0,5]で指定することができる.
Device->SetSampler State()関数でアドレスモードを指定できます.
サマリ
テクスチャ座標は、3 D三角形にマッピングされるテクスチャ三角形を定義します.
D 3 DXCreateTexture FromFile関数を使用して、テクスチャに保存されているイメージファイルからテクスチャを作成できます.
テクスチャフィルタを指定するには、マップフィルタのサンプル状態をスケール、拡大、および嫌いにすることができます.
アドレスモードでは、[0,1]の範囲を超えるテクスチャ座標の処理方法を指定できます.たとえば、テクスチャのタイリング、反射、制限などの処理を行うことができます.
Reference
この問題について(DX 9を使った3 Dゲームプログラミング入門-part.2 Direct 3 D基礎第6章), 我々は、より多くの情報をここで見つけました https://velog.io/@jacod2/DX9을-이용한-3D-Game-프로그래밍-입문-Part.2-Direct3D-기초-6장テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol