• Directx11教程40 纹理映射(10)


         本章尝试使用纹理行列式,或者说纹理数组,在ps中,使用2个纹理,最终的像素颜色,是光照颜色*纹理1采样颜色*纹理2采样颜色,主要是想达到如下的效果:

       把这两个图像以及光照产生的颜色融合生成以下图像:

      为此我们新建一个lighttex2.ps文件,在其中定义:

    //两个纹理,可用于纹理混合,bump mapping等等
    Texture2D shaderTexture[2];
    SamplerState SampleType
    ;

    float4 textureColor1 = shaderTexture[0].Sample(SampleType, input.tex);
    float4 textureColor2 = shaderTexture[1].Sample(SampleType, input.tex);

    textureColor = saturate((textureColor1 + textureColor2)/2.0);

    //2.2是gamma校正值
    finalcolor = finalcolor * pow(textureColor, 2.2)

    另外定义一个LightTex2ShaderClass,专门用来处理lightex2.vs和lighttex2.ps,在该类中,我们通过

    // 设置ps shader资源.
    deviceContext->PSSetShaderResources(0, 2, texArray);

    装入一个纹理数组。

    最后就是Graphics渲染类的修改,我们在左侧再画一面墙,是用一个纹理,而正面的墙,使用纹理融合。

    m_textures[0] = m_TexManager->createTex(m_D3D->GetDevice(),string("stone01.dds"));
    m_textures[1] = m_TexManager->createTex(m_D3D->GetDevice(),string("dirt01.dds"));

    //执行平移操作,得到最终的模型世界矩阵
    D3DXMatrixRotationX(&worldMatrix1, -1.57); //pai/2
    D3DXMatrixTranslation(&worldMatrix2, 0.0, 0.0, 8.0);
    D3DXMatrixMultiply(&worldMatrix3, &worldMatrix1, &worldMatrix2);

    result = m_LightTex2Shader->Render(m_D3D->GetDeviceContext(), m_PlaneModel->GetIndexCount(), worldMatrix3, viewMatrix, projectionMatrix,
        light, material, camera,m_textures);
    if(!result)
        {
        return false;
        }

    //执行平移操作,得到最终的模型世界矩阵
    D3DXMatrixRotationZ(&worldMatrix1, -1.57); //pai/2
    D3DXMatrixTranslation(&worldMatrix2, -10.0, 0.0, 0.0);
    D3DXMatrixMultiply(&worldMatrix3, &worldMatrix1, &worldMatrix2);


    result = m_LightTexShader->Render(m_D3D->GetDeviceContext(), m_PlaneModel->GetIndexCount(), worldMatrix3, viewMatrix, projectionMatrix,
        light, material, camera,m_TexManager->createTex(m_D3D->GetDevice(),string("stone01.dds")));
    if(!result)
        {
        return false;
        }

    程序执行的界面如下:

    image

    完整的代码请参考:

    工程文件myTutorialD3D11_35

    代码下载:

    https://files.cnblogs.com/mikewolf2002/d3d1127-28.zip

    https://files.cnblogs.com/mikewolf2002/pictures.zip

  • 相关阅读:
    BZOJ4849[Neerc2016]Mole Tunnels——模拟费用流+树形DP
    BZOJ3638[Codeforces280D]k-Maximum Subsequence Sum&BZOJ3272Zgg吃东西&BZOJ3267KC采花——模拟费用流+线段树
    BZOJ3291Alice与能源计划——匈牙利算法+模拟费用流
    BZOJ2151种树——模拟费用流+链表+堆
    CF1117D Magic Gems
    CF1117C Magic Ship
    CF1117A Best Subsegment
    Loj 2028 随机序列
    Loj 504 ZQC的手办
    Luogu 3806 点分治1
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/2446316.html
Copyright © 2020-2023  润新知