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)相关推荐
- Directx11教程39 纹理映射(9)
Directx11教程39 纹理映射(9) 原文:Directx11教程39 纹理映射(9) 在myTutorialD3D11_32中,我们在PlaneModelClass中增加一个纹理Texture ...
- Directx11教程(33) 纹理映射(3)
现在我们在myTutorialD3D11_5的基础上,来逐步编码实现纹理映射,之所以在myTutorialD3D11_5基础上改写,是因为这个工程只是画了一个三角形,便于我们贴一个纹理上去,然后改变纹 ...
- Directx11教程(42) 纹理映射(12)-简单的bump mapping
有时候,我们只有一个粗糙的模型,但是我们想渲染纹理细节,比如一个砖墙,我们如何在只有一个平面的时候,渲染出砖墙凹凸的效果. 比如只有这样的墙: 但是我们想要这样的效果: 怎么办呢?这时候,我们可以考虑 ...
- 讲给后台程序员看的前端系列教程(40)——canvas
C语言自学完备手册(33篇) Android多分辨率适配框架 HTML5前端开发实战系列教程 MySQL数据库实操教程(35篇图文版) 推翻自己和过往--自定义View系列教程(10篇) 走出思维困境 ...
- Python培训教程分享:10款超好用的Python开发工具
学会Python技术后,我们在参加工作的时候如果能有辅助工具的话,那么会很大程度的提高我们的工作效率,那么Python都有哪些好用的开发工具呢?下面小编就为大家详细的介绍一下10款超好用的Python ...
- Directx11 教程(2) 基本的windows应用程序框架(2)
Directx11 教程(2) 基本的windows应用程序框架(2) 原文:Directx11 教程(2) 基本的windows应用程序框架(2) 在本教程中,我们把前面一个教程的代码,进行封装.把 ...
- Directx11教程(14) D3D11管线(2)
Directx11教程(14) D3D11管线(2) 原文:Directx11教程(14) D3D11管线(2) 下面我们来了解一些GPU memory的知识,主要参考资料:http://fgiese ...
- STM32 基础系列教程 40 - Lwip_mqtt
前言 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级&qu ...
- Directx11教程四十六之FBX SDK
在之前的DX11入门系列文章中,有篇有关 Directx11教程四十之加载OBJ模型 读取obj模型数据的博客.不过在obj读取的那篇博客我有些坑并没有说,就是我写的那个obj解析器只能解析特定的ob ...
最新文章
- 深度并非一切:普林斯顿、英特尔提出ParNet,速度和准确性显著优于ResNet
- php表单数据提交到本业,PHP_PHP+Mysql+jQuery实现发布微博程序 php篇,先还是要说明本例的业务流程 - phpStudy...
- Decode Ways leetcode java
- Python的列表List常见操作
- python 空指针_Python&CType空指针错误
- D-query SPOJ - DQUERY(主席树求区间中不同的数的个数)
- SpringMVC转发和重定向
- python字典统计排序1_python-如何按字典顺序对Counter.mostCommon(n)的...
- oracle中长字符串长度吗,Oracle 字符串长度函数
- 翁恺老师C语言学习笔记(十)指针_指针运算
- 关于员工技术及培训所想
- 网络OSI七层及各层作用
- 信用社pb通用记账_信用社会计记账采用的是()。A、收付实现制B、权责发生制C、借贷记账法D、单式记账法...
- SAS系统学习之初探
- hp388服务器安装linux,HP DL388 G7做OLI,RAID,BIOS设置linux安装概要
- oracle apex ajax process + dy 校验
- Linux伪文件系统proc
- 加入先进制造的追光者-探索现代机械设计团队的高效协作方式
- flutter 升级androidX的坑记录
- Metal(二) Metal语法规范
热门文章
- Android开源项目,圆形ImageView之CircleImageView
- QT5(一):HelloWord
- Nginx + Tomcat6配置负载均衡
- armv6, armv7, armv7s和i386
- Java学习系列(十五)Java面向对象之细谈线程、线程通信(下)
- AWS想到办法让Alexa能在毫秒内做出回复
- 洛谷P2568 GCD(莫比乌斯反演)
- (Access denied for user 'root'@'localhost' (using password: NO))
- JAVA Metrics 度量工具使用介绍
- Ubuntu使用tcpdump工具