首页 > 其他 > 详细

Directx11教程40 纹理映射(10)

时间:2019-05-06 10:36:28      阅读:174      评论:0      收藏:0      [点我收藏+]
原文: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;
    }

程序执行的界面如下:

技术分享图片

完整的代码请参考:

工程文件myTutorialD3D11_35

代码下载:

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

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

Directx11教程40 纹理映射(10)

原文:https://www.cnblogs.com/lonelyxmas/p/10817634.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!