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
最新文章
- Java性能调优之:idea变慢解决
- angular源码阅读的起点,setupModuleLoader方法
- 关于OJ1028的参考解法
- comboBox 手动输入后回车自动更新数据
- QTP处理各类鼠标事件fireEvent
- ECLIPSE ANDROID PROJECT IMPORT SUMMARY
- SSRS报表参数设置
- php 得到一个文件夹下的所有文件,包括子文件中的文件
- POJ2817 WordStack(状压DP)
- U盘启动
- Delphi XE5教程5:程序的结构和语法
- Solr学习笔记-在Tomcat上部署执行Solr
- 2015 南阳ccpc The Battle of Chibi (uestc 1217)
- mysql8.0.主从复制搭建
- CF1129B 【Wrong Answer】
- 利用chrome浏览器爬取数据
- steam Depot 生成与应用脚本
- [PHP]更新中间关联表数据的两种思路
- SQL文件的BOM问题导致的invalid character错误及解决
- Linux杀毒软件ClamAV初次体验
热门文章
- HTML5 drag拖动事件
- 此处有加速 apt-get github docker pull
- 【JAVA】Class.getResource()与ClassLoader.getResource()的区别
- PAT甲级——A1046 Shortest Distance
- JSP - (Java Server Pages) - Java服务器界面
- ongl与Struts标签
- 2019.10.29 csp-s模拟测试92 反思总结
- Leetcode476.Number Complement数字的补数
- 【python之路35】网络编程之socket相关
- 搭建单向HTTPS