zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    随机生成字符串,可用来当id
    自己总结的关于uniapp项目用androidstuido打包成apk
    css3 滑动效果 门
    在数组里面随机获取随机的几个内容
    把一个数组分割成两个(不管奇数还是偶数)
    Mysql常用命令
    怎样才能彻底地删除多余输入法软件
    启动MySQL服务
    linux监控命令全覆盖
    浅谈MVC模式与SSH框架
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/2446316.html
Copyright © 2011-2022 走看看