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

  • 相关阅读:
    python笔记2-python常见数据类型(一)
    python笔记1-环境安装和基本语法
    selenium自动化脚本错误总结
    Postman-Post请求示例
    用PHP删除ftp下载导致的文件空行
    JS实现鼠标悬浮,显示内容
    asp.net中处理程序调用HttpContext.Current.Session获取值出错
    自动化创建tornado项目
    fabric运维
    Python3虚拟环境安装:virtualenv、virtualenvwralpper
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/2446316.html
Copyright © 2011-2022 走看看