範例 (DirectX HLSL 紋理物件)
取樣紋理。
<Template Type > Object.Sample ( sampler_state S, float Location [, int Offset] ) ;
參數
項目 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
物件 |
除了 Texture2DMS 和 Texture2DMSArray) 以外,任何 紋理物件 類型 (。 |
||||||||||
S |
[in] 取樣器狀態。 這是在包含狀態指派之效果檔案中宣告的物件。 |
||||||||||
位置 |
[in]紋理座標。 引數類型相依于 texture-object 類型。
|
||||||||||
抵消 |
[in]選擇性紋理座標位移,可用於任何紋理物件類型;位移會套用至取樣之前的位置。 紋理位移必須是靜態的。 引數類型相依于 texture-object 類型。 如需詳細資訊,請參閱 套用紋理座標位移。
|
傳回值
紋理的範本類型,可能是單一或多元件向量。 格式是以紋理 的DXGI_FORMAT為基礎。
最小著色器模型
下列著色器模型支援此函式。
vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|
x | x |
- TextureCubeArray 可在著色器模型 4.1 或更高版本中使用。
- 著色器模型 4.1 可在 Direct3D 10.1 或更高版本中使用。
範例
這個部分程式碼範例是以 BasicHLSL11 範例中的 BasicHLSL11.fx 檔案為基礎。
// Object Declarations
Texture2D g_MeshTexture; // Color texture for mesh
SamplerState MeshTextureSampler
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};
struct VS_OUTPUT
{
float4 Position : SV_POSITION; // vertex position
float4 Diffuse : COLOR0; // vertex diffuse color (note that COLOR0 is clamped from 0..1)
float2 TextureUV : TEXCOORD0; // vertex texture coords
};
VS_OUTPUT In;
// Shader body calling the intrinsic function
...
Output.RGBColor = g_MeshTexture.Sample(MeshTextureSampler, In.TextureUV) * In.Diffuse;
備註
紋理取樣會使用紋素位置來查閱紋素值。 位移可以套用至查閱之前的位置。 取樣器狀態包含取樣和篩選選項。 這個方法可以在圖元著色器內叫用,但頂點著色器或幾何著色器不支援此方法。
只在整數位移處使用位移;否則,根據硬體實作或驅動程式設定,您可能會得到不同的結果。
計算紋素位置
紋理座標是參考紋理資料的浮點值,也稱為正規化紋理空間。 位址換行模式會依此順序套用, (紋理座標 + 位移 + 包裝模式) 修改 [0...1] 範圍以外的紋理座標。
針對紋理陣列,location 參數中的其他值會指定紋理陣列中的索引。 此索引會被視為縮放的浮點值 (,而不是標準紋理座標的標準化空間) 。 整數索引的轉換順序如下, (float + round-to-near-even 整數 + 限制到陣列範圍) 。
套用紋理座標位移
位移參數會修改材質空間中的紋理座標。 即使紋理座標是標準化浮點數,位移仍會套用整數位移。 另請注意,紋理位移必須是靜態的。
傳回的資料格式取決於紋理格式。 例如,如果紋理資源是以DXGI_FORMAT_A8B8G8R8_UNORM_SRGB格式定義,取樣作業會將取樣的紋素從 gamma 2.0 轉換成 1.0、篩選,並將結果寫入為範圍 [0..1] 中的浮點值。