Direct3D 9 (纹理寻址)

Direct3D 应用程序可以将纹理坐标分配至任何基元的任何顶点。 有关详细信息,请参阅Direct3D 9 (纹理) 。 通常,你分配至某个顶点的 u 纹理以及 v 纹理坐标的范围介于 0.0-1.0(包含这两个值)。 但如果在此范围之外分配纹理坐标,则可以创造某些特殊的纹理效果。

通过设置纹理寻址模式,可以控制 Direct3D 对 [ 0.0、1.0 范围外的 ] 纹理坐标执行哪些操作。 例如,你可以通过应用程序设置纹理寻址模式,以使得纹理跨基元平铺。

借助 Direct3D,应用程序可以执行纹理环绕。 需要注意的是,将纹理寻址模式设置为 D3DTADDRESS WRAP 与执行纹理 _ 包装不同。 将纹理寻址模式设置为 D3DTADDRESS WRAP 会导致源纹理的多个副本应用于当前基元,启用纹理包装会更改系统光栅化纹理多边形的方式。 _ 有关详细信息,请参阅Direct3D 9 (纹理) 。

启用纹理包装会有效地使 [ 0.0、1.0 范围外的纹理坐标无效,在这种情况下,光栅化此类取消对齐纹理坐标的行为是不定义的。 ] 当纹理环绕处于启用状态时,不能使用纹理寻址模式。 请注意,当纹理环绕处于启用状态时,你的应用程序不会指定低于 0.0 或高于 1.0 的纹理坐标。

设置寻址模式

可以通过调用 IDirect3DDevice9::SetSamplerState 方法为各个纹理阶段设置纹理寻址模式。 在 Sampler 参数中指定 所需的纹理阶段 标识符。 将 Type 参数设置为 D3DSAMP _ ADDRESSU、D3DSAMP ADDRESSV 或 D3DSAMP ADDRESSW 值,以单独更新 _ _ u-、v 或 w 寻址模式。 Value 参数确定要设置的模式。 这可以是 D3DTEXTUREADDRESS 枚举类型的任何成员。 若要检索纹理阶段的当前纹理地址模式,请调用 IDirect3DDevice9::GetSamplerState,使用 _ D3DSAMP _ ADDRESSU、D3DSAMP ADDRESSV 或 _ D3DSAMP ADDRESSW 成员(D3DSAMPLERSTATETYPE 枚举的成员)来标识要信息的地址模式。

设备限制

尽管系统一般情况下支持超出 0.0-1.0(包括这两者)范围的纹理坐标,但硬件限制通常会影响纹理坐标可超出的范围。 检索设备功能时,呈现设备在 D3DCAPS9结构的 MaxTextureRepeat 成员中传达此限制。 此成员中的 值描述设备允许的完整纹理坐标范围。 例如,如果限值为 128,则输入的纹理坐标必须控制在 -128.0 至 +128.0 的范围内。 使超出该范围的纹理坐标通过顶点是无效的。 相同的限制适用于因纹理坐标自动生成以及纹理坐标变换而生成的纹理坐标。

MaxTextureRepeat 的解释也受 D3DPTEXTURECAPS _ TEXREPEATNOTSCALEDBYSIZE 功能位的影响。 设置此位后 ,MaxTextureRepeat 成员中的值将精确使用,如所述。 但是,未设置 D3DPTEXTURECAPS _ TEXREPEATNOTSCALEDBYSIZE 时,纹理重复限制取决于纹理坐标索引的纹理大小。 在这种情况下 ,MaxTextureRepeat 必须在最大详细级别按当前纹理大小进行缩放,以计算有效的纹理坐标范围。 例如,假设纹理尺寸为 32,MaxTextureRepeat 为 512,则实际的有效纹理坐标范围为 512/32 = 16,因此此设备的纹理坐标必须位于 -16.0 到 +16.0 的范围内。

以下主题包含有关纹理寻址模式的其他信息。

基本文本概念