zoukankan      html  css  js  c++  java
  • MipMaps

    在屏幕上的三角形和纹理三角形通常是不一样大的。为了使这个大小差异变小,我们为纹理创建mipmaps链。也就是说将一个纹理创建成连续的变小的纹理,但是对它们等级进行定制过滤,因此对我们来说保存细节是很重要的(如图6.4)。

    6.4.1 Mipmaps过滤器

           mipmap过滤器是被用来控制Direct3D使用mipmaps的。设置mipmap过滤器,你可以这样写:

    Device->SetSamplerState(0, D3DSAMP_MIPFILTER, Filter);

    在Filter处你能用下面三个选项中的一个:

    D3DTEXF_NONE——不使用mipmap。

    D3DTEXF_POINT——通过使用这个过滤器,Direct3D将选择与屏幕三角形大小最接近的mipmap等级。一旦等级选定了,Direct3D就将按照指定的过滤器进行缩小和放大过滤。

    D3DTEXF_LINEAR­­——通过使用这个过滤器,Direct3D将选择两个最接近的mipmap等级,缩小和放大过滤每个等级,然后线性联合计算它们两个等级来得到最终的颜色值。

    6.5 寻址模式

           以前,我们规定纹理坐标必须指定在[0,1]之间。从技术上来说这是不正确的;他们能够超出这个范围。纹理坐标也可以在[0,1]的范围之外,它通过Direct3D的寻址模式来定义。这里有四种寻址模式:环绕纹理寻址模式、边框颜色纹理寻址模式、截取纹理寻址模式、镜像纹理寻址模式,这里分别给出了它们的示意图6.5,6.6,6.7,6.8。

    在这些图片中,纹理坐标通过(0,0)(0,3)(3,0)(3,3)顶点来定义。在u轴和v轴上方块又被分成子块放进3×3的矩阵中。假如,你想让纹理按5×5的方格来平铺,你就应该指定环绕纹理寻址模式并且纹理坐标应该设置为(0,0)(0,5)(5,0)(5,5)。

    Sampler states define texture sampling operations such as texture addressing and texture filtering. Some sampler states set-up vertex processing, and some set-up pixel processing. Sampler states can be saved and restored using stateblocks (see State Blocks Save and Restore State (Direct3D 9)).

    typedef enum D3DSAMPLERSTATETYPE
    {
    D3DSAMP_ADDRESSU = 1,
    D3DSAMP_ADDRESSV = 2,
    D3DSAMP_ADDRESSW = 3,
    D3DSAMP_BORDERCOLOR = 4,
    D3DSAMP_MAGFILTER = 5,
    D3DSAMP_MINFILTER = 6,
    D3DSAMP_MIPFILTER = 7,
    D3DSAMP_MIPMAPLODBIAS = 8,
    D3DSAMP_MAXMIPLEVEL = 9,
    D3DSAMP_MAXANISOTROPY = 10,
    D3DSAMP_SRGBTEXTURE = 11,
    D3DSAMP_ELEMENTINDEX = 12,
    D3DSAMP_DMAPOFFSET = 13,
    D3DSAMP_FORCE_DWORD = 0x7fffffff,
    } D3DSAMPLERSTATETYPE, *LPD3DSAMPLERSTATETYPE;
    Constants
    D3DSAMP_ADDRESSU
    Texture-address mode for the u coordinate. The default is D3DTADDRESS_WRAP. For more information, see D3DTEXTUREADDRESS.
    D3DSAMP_ADDRESSV
    Texture-address mode for the v coordinate. The default is D3DTADDRESS_WRAP. For more information, see D3DTEXTUREADDRESS.
    D3DSAMP_ADDRESSW
    Texture-address mode for the w coordinate. The default is D3DTADDRESS_WRAP. For more information, see D3DTEXTUREADDRESS.
    D3DSAMP_BORDERCOLOR
    Border color or type D3DCOLOR. The default color is 0x00000000.
    D3DSAMP_MAGFILTER
    Magnification filter of type D3DTEXTUREFILTERTYPE. The default value is D3DTEXF_POINT.
    D3DSAMP_MINFILTER
    Minification filter of type D3DTEXTUREFILTERTYPE. The default value is D3DTEXF_POINT.
    D3DSAMP_MIPFILTER
    Mipmap filter to use during minification. See D3DTEXTUREFILTERTYPE. The default value is D3DTEXF_NONE.
    D3DSAMP_MIPMAPLODBIAS
    Mipmap level-of-detail bias. The default value is zero.
    D3DSAMP_MAXMIPLEVEL
    level-of-detail index of largest map to use. Values range from 0 to (n - 1) where 0 is the largest. The default value is zero.
    D3DSAMP_MAXANISOTROPY
    DWORD maximum anisotropy. The default value is 1.
    D3DSAMP_SRGBTEXTURE
    Gamma correction value. The default value is 0, which means gamma is 1.0 and no correction is required. Otherwise, this value means that the sampler should assume gamma of 2.2 on the content and convert it to linear (gamma 1.0) before presenting it to the pixel shader.
    D3DSAMP_ELEMENTINDEX
    When a multielement texture is assigned to the sampler, this indicates which element index to use. The default value is 0.
    D3DSAMP_DMAPOFFSET
    Vertex offset in the presampled displacement map. This is a constant used by the tessellator, its default value is 0.
    D3DSAMP_FORCE_DWORD
    Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.

           下面的代码片段列举的是怎样设置这四种寻址模式:

    // set wrap address mode
    if( ::GetAsyncKeyState('W') & 0x8000f )
    {
           Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
           Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
    }
    // set border color address mode
    if( ::GetAsyncKeyState('B') & 0x8000f )
    {
           Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
           Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
           Device->SetSamplerState(0, D3DSAMP_BORDERCOLOR, 0x000000ff);
    }
    // set clamp address mode
    if( ::GetAsyncKeyState('C') & 0x8000f )
    {
           Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
           Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
    }
    // set mirror address mode
    if( ::GetAsyncKeyState('M') & 0x8000f )
    {
           Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);
           Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);
    }

  • 相关阅读:
    kali国内更新源
    nmap教程(下)
    nmap教程(上)
    apt-get常用命令
    linux如何制作程序桌面快捷方式
    linux怎么把英文版火狐浏览器改成中文
    百度地图demo
    普元云计算-一起来DIY一个人工智能实验室吧
    普元云计算-拥抱人工智能,从机器学习开始
    普元云计算-Java开发者的PaaS指南
  • 原文地址:https://www.cnblogs.com/huking/p/1737300.html
Copyright © 2011-2022 走看看