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教程(43) 纹理映射(13)-动态纹理映射
原文:Directx11教程(43) 纹理映射(13)-动态纹理映射 本篇教程中,我们将在前面基于光照的地形与水面程序里面加上纹理映射,而且我们会基于时间动态改变水面的纹理坐标,实现水面纹理 ...
- Directx11教程41 纹理映射(11)
原文:Directx11教程41 纹理映射(11) 1.第一副图我们采用各性异性的滤波方式,并设置最大各性异性值为8. samplerDesc.Filter = D3D11_FILT ...
- Directx11教程(35) 纹理映射(5)
原文:Directx11教程(35) 纹理映射(5) 到现在为止,我们的TextureClass初始化函数非常简单,说白了就是一行代码: result = D3DX11CreateShader ...
- Directx11教程(33) 纹理映射(3)
原文:Directx11教程(33) 纹理映射(3) 现在我们在myTutorialD3D11_5的基础上,来逐步编码实现纹理映射,之所以在myTutorialD3D11_5基础上改写,是 ...
- Directx11教程(32) 纹理映射(2)
原文:Directx11教程(32) 纹理映射(2) 在写代码之前,我们先制作一个dds文件.从网上找到了一张照片,处理成为512*512,保存为jpg格式. 启动微软的directx ...
- Directx11教程(42) 纹理映射(12)-简单的bump mapping
原文:Directx11教程(42) 纹理映射(12)-简单的bump mapping 有时候,我们只有一个粗糙的模型,但是我们想渲染纹理细节,比如一个砖墙,我们如何在只有一个平面的时候 ...
- Directx11教程39 纹理映射(9)
原文:Directx11教程39 纹理映射(9) 在myTutorialD3D11_32中,我们在PlaneModelClass中增加一个纹理TextureClass* m_Texture;读 ...
- Directx11教程38 纹理映射(8)
原文:Directx11教程38 纹理映射(8) 上篇日志中,我们用纹理和光照颜色调制的方式得到最终颜色,本章我们尝试用纹理采样的颜色,直接做为材质的漫反射系数Kd,并用它来做光照计算,最后 ...
- Directx11教程37 纹理映射(7)
原文:Directx11教程37 纹理映射(7) 本章是在教程35.36的基础上来实现一个光照纹理结合的程序,就是把场景中旋转的cube加上纹理. lighttex.vs中顶点的结构现在 ...
随机推荐
- uni-app中不使用scroll-view组件,监听页面滑直底部事件
最终达到的目标效果 将要用到 监听页面滚动事件:onPageScroll 获取节点信息uni.createSelectorQuery() 标签布局 <template> <view ...
- Nodejs Express目录结构
原文 http://www.leixuesong.cn/1508 Express是一个基于Node.js平台的极简.灵活的web应用开发框架.在前面我们已经详细介绍了Express的安装,下面详细讲 ...
- 第一个SpringBoot插件-捕获请求并且支持重新发起
SpringBoot 插件入门 简介 公司用的是SpringBoot,api框架用的是swagger-ui,确实用的不错,但是在使用过程中发现一个问题,就是当前端正式调用的时候,如果参数一多的话模拟请 ...
- [Day5] Nginx 变量
一. Nginx中的变量原理 提供变量的模块和使用变量的模块 nginx启动,提供变量的模块会在一个回调函数中定义新的变量名和解析出变量的方法. 请求来了以后,使用变量的模块会根据变量名,去调用解析变 ...
- 使用Maven编译运行Storm入门代码(Storm starter)(转)
Storm 官方提供了入门代码(Storm starter),即 Storm安装教程 中所运行的实例(storm-starter-topologies-0.9.6.jar),该入门代码位于 /usr/ ...
- Python list以及numpy处理技巧
1.numpy数组后面添加一个list: import numpy as np a=[[1,2,3],[4,5,6],[7,8,9]] box=np.array(a) box=np.vstack((b ...
- virtualenv简单使用
前提 在开发过程中,经常需要使用各种第三方库,而且python又提供了pip,easy_install等工具来简化库的安装,所以很容易就会在系统python的site-packages目录中装满各种各 ...
- javascript基础:bom
一.BOM 1.概念:Browser Object Model 浏览器对象模型 * 将浏览器的各个组成部分封装成对象 2.组成: * Window:窗口对象 1 ...
- php数据几行代码导出到excel(非插件)
<?php header("Content-type:application/vnd.ms-excel"); header("Content-Disposition ...
- 2017年8月9日学习内容存放 #socket通信介绍
2017年8月9日学习内容存放 #socket通信介绍 ''' OSI七层 应用 表示 会话 传输 网络 ip 数据链路 mac 物理层 网线 http smtp dns ftp ssh snmp i ...