Texture 物件

在 Direct3D 10 中,您可以獨立指定取樣器和紋理;紋理取樣是使用樣板化紋理物件來實作。 此樣板化紋理物件具有特定格式、傳回特定類型,並實作數種方法。

Direct3D9 與 Direct3D10 之間的差異:

  • 在 Direct3D 9 中,取樣器會系結至特定紋理。
  • 在 Direct3D 10 中,紋理和取樣器是獨立的物件。 每個樣板化紋理物件都會實作紋理取樣方法,以將紋理和取樣器視為輸入參數。

以下是 (建立所有紋理物件的語法,但多重取樣物件) 除外。

Object1 [ <Type> ] Name;

Multisampled 物件 (Texture2DMS 和 Texture2DMSArray) 需要明確陳述紋理大小,並以樣本數目表示。

Object2 [ <Type, Samples> ] Name;

參數

項目 描述
物件
紋理物件。 必須是下列其中一種類型。
Object1 類型 描述
Buffer Buffer
Texture1D 1D 紋理
Texture1DArray 1D 紋理的陣列
Texture2D 2D 紋理
Texture2DArray 2D 紋理的陣列
Texture3D 3D 紋理
TextureCube Cube 紋理
TextureCubeArray Cube 紋理的陣列
Object2 類型 描述
Texture2DMS 2D 多重取樣紋理
Texture2DMSArray 2D 多重取樣紋理的陣列

  1. Buffer 類型支援 GetDimensions 以外的大部分紋理物件方法。
  2. TextureCubeArray 適用于著色器模型 4.1 或更高版本。
  3. 著色器模型 4.1 可在 Direct3D 10.1 或更高版本中使用。

類型

選擇性。 任何 純量 HLSL 類型向量 HLSL 類型,以角括弧括住。 預設類型為 float4

名字

指定紋理物件名稱的 ASCII 字串。

樣品

(範圍介於 1 到 128) 之間的樣本數目。

範例 1

以下是宣告紋理物件的範例。

Texture2D <float4> MyTex;

Texture2DMS <float4, 128> MyMSTex;

Texture 物件方法

每個紋理物件都會實作特定方法;以下是列出所有方法的資料表。 請參閱每個方法的參考頁面,以查看哪些物件可以使用該方法。

Texture 方法 描述 vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
CalculateLevelOfDetail 計算 LOD,傳回固定的結果。 x
CalculateLevelOfDetailUnclamped 計算 LOD,傳回未取樣的結果。 x
收集 取得四個樣本 (紅色元件,只) 在取樣紋理時用於雙線性插補。 x x x
GetDimensions 取得指定 Mipmap 層級的紋理維度。 x x x x x x
GetDimensions (MultiSample) 取得指定 Mipmap 層級的紋理維度。 x x x
GetSamplePosition 取得指定樣本的位置。 x x x
載入 載入資料,而不需任何篩選或取樣。 x x x x x x
(載入多重取樣) 載入資料,而不需任何篩選或取樣。 x x x x
範例 取樣紋理。 x x
SampleBias 取樣紋理,將偏差值套用至 mipmap 層級之後。 x x
SampleCmp 使用比較值來取樣紋理,以拒絕樣本。 x x
SampleCmpLevelZero 僅使用比較值來拒絕樣本,取樣紋理 (mipmap 層級 0) 。 x x x x x x
SampleGrad 使用漸層取樣紋理,以影響取樣位置的計算方式。 x x x x x x
SampleLevel 在指定的 mipmap 層級上取樣紋理。 x x x x x x

傳回類型

除非另有指定,否則紋理物件的傳回型別是 float4,但多重取樣的反別名紋理物件除外,且一律需要指定的類型和樣本計數。 傳回型別與紋理資源類型相同 (DXGI_FORMAT) 。 換句話說,它可以是下列任何類型。

類型 描述
FLOAT 32 位 float (請參閱 浮點規則 ,以瞭解 IEEE float) 的差異
int 32 位元帶正負號的整數
不帶正負號的整數 32 位元不帶正負號的整數
snorm 範圍 -1 到 1 的 32 位浮點數 (請參閱 浮點規則 ,以瞭解 IEEE float)
unorm 範圍 0 到 1 的 32 位浮點數 (請參閱 浮點規則 ,以瞭解 IEEE float)
任何紋理類型或結構 傳回的元件數目必須介於 1 到 3 之間。

此外,傳回類型可以是任何紋理類型,包括 結構,但必須小於 4 個元件,例如傳回一個元件的 float1 類型。

紋理中遺漏元件的預設值

紋理資源類型中遺漏元件的預設值為零,但 Alpha 元件除外 (A) ;遺漏 A 的預設值為一。 這個著色器顯示的方式取決於紋理資源類型。 其格式為實際存在於紋理資源類型中的第一個具型別元件, (從 RGBA 順序) 從左開始。 如果此表單為 UNORM 或 FLOAT,則遺漏 A 的預設值為 1.0f。 如果表單為 SINT 或 UINT,則遺漏 A 的預設值會0x1。

例如,當著色器讀取DXGI_FORMAT_R24_UNORM_X8_TYPELESS紋理資源類型 ,G 和 B 的預設值為零,而 A 的預設值為 1.0f;當著色器讀取 DXGI_FORMAT_R16G16_UINT 紋理資源類型時,B 的預設值為零,而 A 的預設值為 0x00000001;當著色器讀取DXGI_FORMAT_R16_SINT紋理資源類型 ,G 和 B 的預設值為零,而 A 的預設值會0x00000001。

範例 2

以下是使用紋理方法進行紋理取樣的範例。

sampler MySamp;
Texture2D <float4> MyTex;
 
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
    return MyTex.Sample( MySamp, TexCoords[0] ));
}

最小著色器模型

下列著色器模型中支援此物件。

著色器模型 支援
著色器模型 4 和更高的著色器模型

另請參閱

著色器模型 4