[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectX3D>テスクチャのアドレッシングとラッピング

テスクチャのアドレッシングとラッピング

UV座標系では画像は全て0~1の間にスケーリングされます。では、もしも1以上の数値を指定した場合はどうなるのでしょうか?下はその結果です。

    verts[0].Position  =new Vector3(1, 1,0);
    verts[0].Tu = 0; verts[0].Tv =0;

    verts[1].Position  =new Vector3(-1, 1,0);
    verts[1].Tu = 2; verts[1].Tv =0;

    verts[2].Position  =new Vector3(1, -1,0);
    verts[2].Tu = 0; verts[2].Tv =2;

    verts[3].Position  =new Vector3(-1, -1,0);
    verts[3].Tu = 2; verts[3].Tv =2;

ラップテクスチャアドレッシング

と、こんな感じになります。ちなみにマイナスの値を指定することもできますが、あんまりにも大きな値(または小さな値)を指定すると失敗することがあるので注意です(そこら辺についてはMSDNでお願いします)。

テクスチャに関する設定を変える方法

public void SetSamplerState(
    int stage,
    SamplerStageStates state,
    int value
    );

「Sampler」は簡単に言うと「Sampl」つまり「サンプル(取り出す)」のことです。つまりテクスチャから特定のピクセルを拾い上げるときにどういう拾い上げをするかを設定するものです。「stage」は0番からです。「state」については下の表にまとめておきます。「value」の型はオーバーライドで「float、bool、int」があります。

DMapOffset
ElementIndex
SrgbTexture
MaxMipLevel
MipMapLevelOfDetailBias
BorderColor
AddressW
AddressV
AddressU
MinFilter
MagFilter
MaxAnisotropy
MipFilter

いくつかのものについてはここでも触れますが、マイナーであったり、私の環境でサポートされていないものについては説明しないかもしれません。

テクスチャアドレッシングモード

標準ではUV座標に0~1以外の値をセットすると繰り返しになります。ですが、設定によってはミラーしながらテクスチャを貼り付ける事なんかも可能です。

列挙型 説明
AddressU u座標で使うアドレッシングモード。デフォルト値はTextureAddress.Wrap。「TextureAddress」を利用して設定します。
AddressV v座標で使うアドレッシングモード。詳細は上を同じ。
AddressW w座標で使うアドレッシングモード。詳細は上と同じ。キューブテクスチャで使います。
BorderColor 境界色。特定のアドレッシングモードで利用します。
今回利用する座標はこんな感じです。
    verts[0].Position  =new Vector3(1, 1,0);
    verts[0].Tu = -1; verts[0].Tv =-1;

    verts[1].Position  =new Vector3(-1, 1,0);
    verts[1].Tu = 2; verts[1].Tv =-1;

    verts[2].Position  =new Vector3(1, -1,0);
    verts[2].Tu = -1; verts[2].Tv =2;

    verts[3].Position  =new Vector3(-1, -1,0);
    verts[3].Tu = 2; verts[3].Tv =2;

ラップ・テクスチャ・アドレッシング・モード(TextureAddress.Wrap)

デフォルトの設定です。設定方法は次の通りです。

device_.SetSamplerState(0,SamplerStageStates.AddressU
    ,(int)TextureAddress.Wrap);
device_.SetSamplerState(0,SamplerStageStates.AddressV
    ,(int)TextureAddress.Wrap);

ラップテクスチャアドレッシング

表示すると上のような感じになります。微妙なゆがみは補正をかけていないからです。

ミラー・テクスチャ・アドレッシング・モード(TextureAddress.Mirror)

device_.SetSamplerState(0,SamplerStageStates.AddressU
    ,(int)TextureAddress.Mirror);
device_.SetSamplerState(0,SamplerStageStates.AddressV
    ,(int)TextureAddress.Mirror);

ミラーテクスチャアドレッシング

まあ、見ての通りです。画像を反転コピーさせながら表示させます。

クランプ・テクスチャ・アドレッシング・モード(TextureAddress.Clamp)

device_.SetSamplerState(0,SamplerStageStates.AddressU
    ,(int)TextureAddress.Clamp);
device_.SetSamplerState(0,SamplerStageStates.AddressV
    ,(int)TextureAddress.Clamp);

クランプテクスチャアドレッシング

0~1以外は端っこの色を引き延ばして表示します。

境界色テクスチャ・アドレッシング・モード(TextureAddress.Clamp)

device_.SetSamplerState(0,SamplerStageStates.AddressU
    ,(int)TextureAddress.Border);
device_.SetSamplerState(0,SamplerStageStates.AddressV
    ,(int)TextureAddress.Border);

device_.SetSamplerState(0,SamplerStageStates.BorderColor
    ,Color.Black.ToArgb());

境界色テクスチャアドレッシング

設定した境界色で0~1以外を塗りつぶします。境界色も同じ方法で設定します。

一回だけミラー(TextureAddress.MirrorOnce)

device_.SetSamplerState(0,SamplerStageStates.AddressU
    ,(int)TextureAddress.MirrorOnce);
device_.SetSamplerState(0,SamplerStageStates.AddressV
    ,(int)TextureAddress.MirrorOnce);

一回ミラーアドレッシング?

これだけはテクスチャの座標が[-2,2]になっています。この機能は説明しにくいです。とりあえず図の通り。使い所がよく分からない。

その他

設定は「U,V」別々になっているためそれぞれ別々に指定できます。工夫して使ってみて下さい。

テクスチャラッピングモード

包むようなサンプルを行いたいときに使うものです。これを設定するとアドレッシングは無視されます。

これはたとえば、[0.6,0.4]と指定した場合に[0.6,1.4]とWrapでラッピングするのと同じ事をしてくれます。どうしてこの機能があるのかよく分かりませんが、一応紹介しておきます。設定は「Device.RenderState.Wrap0」に設定します。数字の部分はステージ番号と対応しているのでそれにあわせて使って下さい。ここには列挙型を指定します。「WrapCoordinates」というものです。

Zero Uテクスチャのラッピング(1次元方向のラッピング)。
One Vテクスチャのラッピング(2次元方向のラッピング)。
Two Wテクスチャのラッピング(3次元方向のラッピング)。
Three 4次元方向のラッピング。

とりあえず、それぞれ指定するとラッピングを行ってくれます。それと無効にしたい場合は「0」を代入してあげればOKです。

その他

他にも拡大縮小時のサンプリングフィルタに関する設定もありますが、それはまた後の機会にということで。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-4-2 最終更新2006-5-13
[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectX3D>テスクチャのアドレッシングとラッピング