Directx11教程37 纹理映射(7)
本章是在教程35、36的基础上来实现一个光照纹理结合的程序,就是把场景中旋转的cube加上纹理。
lighttex.vs中顶点的结构现在为:
struct VertexInputType
{
float4 position : POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD0; //纹理坐标
float4 Kd : DIFFUSE;
float4 Ks: SPECULAR;
};
//纹理坐标
output.tex = input.tex;
纹理坐标不做任何变化,只是单纯的从vs输出到ps中。
lighttex.ps中,现在多了2个变量:
Texture2D shaderTexture;
SamplerState SampleType;
分别表示纹理和纹理采样状态。
纹理的颜色可以用hlsl函数float4 textureColor = shaderTexture.Sample(SampleType, input.tex);计算得到,最后我们把光照计算得到颜色和纹理采样的颜色用模式调制的方式(就是相乘)调和在一起,得到最终颜色。 finalcolor = finalcolor * textureColor;
现在对CubeModelClass类做一些变化:
struct VertexType
{
D3DXVECTOR3 position;
D3DXVECTOR3 normal; //法向
D3DXVECTOR2 texture;//纹理坐标
D3DXVECTOR4 Kd; //材质漫反射系数
D3DXVECTOR4 Ks; //材质的高光系数
};
定义一个私有成员变量TextureClass* m_Texture;用它来读取纹理,产生需要的纹理资源视图数据。在初始化函数中,我们装入纹理数据:
bool CubeModelClass::Initialize(ID3D11Device* device, char* modelFilename,WCHAR* textureFilename)
{
bool result;
// 装入模型数据,
result = LoadModel(modelFilename);
if(!result)
{
return false;
}
// 装入纹理数据.
result = LoadTexture(device, textureFilename);
if(!result)
{
return false;
}
// 初始化顶点缓冲和顶点索引缓冲.
result = InitializeBuffers(device);
if(!result)
{
return false;
}
return true;
}
接下来,我们就是新写一个LightTexShaderClass,用来处理纹理光照混合的shader处理,这个类和LightShaderClass的区别是多了一个采样状态的变量。
//采样状态
ID3D11SamplerState* m_sampleState;
这个状态设置后,会被传入ps中
//设置采样状态
deviceContext->PSSetSamplers(0, 1, &m_sampleState);
程序运行后界面如下:
完整的代码请参考:
工程文件myTutorialD3D11_30
代码下载:
http://files.cnblogs.com/mikewolf2002/d3d1127-28.zip
http://files.cnblogs.com/mikewolf2002/pictures.zip
最新文章
- Ubuntu上Grafana 监控 Docker的技巧
- tiny中文乱码问题,不过仅适用于windows,所以xml不可以出现中文
- dblink
- ACM 盗梦空间
- PHP执行系统命令
- mormot 数据集转换为JSON字串
- C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
- MySQL修改root密码的几种方法
- HDU-1874 畅通工程续 (最短路径启蒙题)
- Visual C++内存泄露检测—VLD工具使用说明
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
- html css jquery 回到顶部按钮
- 如何使用ajax(jquery)
- 【树莓派】Linux自动配置IP
- mysql DML DDL DCL
- [LeetCode] Out of Boundary Paths 出界的路径
- 最全的Django入门及常用配置
- 前端项目微金所1 - bootstrap模板,Compatible(兼容),Viewport(视口),条件注释,第三方依赖,MediaQuery媒体查询
- java编程感悟01
- JUC源码1-原子量
热门文章
- axios post请求后台接收不到参数 和 一些配置问题
- PHP的垃圾回收机制(开启垃圾回收机制后的优缺点是什么)
- cookie - 提示上一次访问该网页的时间
- 爱上一门语言不需要理由——我的js之路
- 交叉熵-loss-理解
- dubbo admin详解
- django2.x报错No module named 'django.core.urlresolvers'b
- webServices学习三(概念详解)
- 2019-7-9-Roslyn-如何在-Target-引用-xaml-防止文件没有编译
- 1.Js 点击控件区域之外隐藏控件