博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectX11 指定材质
阅读量:4086 次
发布时间:2019-05-25

本文共 1068 字,大约阅读时间需要 3 分钟。

指定材质

1. 如何指定材质的值?

表面上的材质有可能会发生变化;也就是说,表面上不同的点可能会有不同的材质值。例如,一个轿车模型的车身、窗户、灯和轮胎反射和吸收光线的能力是不一样的,所以轿车表面的材质值也应该不一样。

这里写图片描述
(将轿车网格分为5个材质属性组)

要模拟材质值的不同,一种方法是在顶点级别上定义材质值。这些材质值会在三角形表面进行线性插值,使三角形网格的每个表面点都拥有材质值。但是,从第6章中的“山峰与河谷演示程序”中可以看到,在顶点级别定义材质颜色模拟出的效果还是太粗糙。而且,顶点颜色还会在顶点结构中添加额外的数据,我们还需要给每个顶点上色的工具。更普遍的方法是使用纹理映射,将会在下一章中介绍。还有,在频繁调用绘制的过程中我们还要修改材质。因此,我们将材质值设置为常量缓冲的一个成员,除非在两次绘制之间改变了这个材质值,所有在设置之后绘制的几何体都会使用这个材质。下面的伪代码展示了如何绘制一辆轿车:

设置主要车灯材质到常量缓存绘制主要车灯几何体设置辅助车灯材质到常量缓存绘制辅助车灯几何体设置轮胎材质到常量缓存绘制轮胎几何体设置窗户材质到常量缓存绘制窗户几何体设置车身材质到常量缓存绘制车身几何体

我们的材质结构体定义如下,位于LightHelper.h中:

struct Material{    Material(){ ZeroMemory(this,sizeof(this));}    XMFLOAT4 Ambient;    XMFLOAT4 Diffuse ;    XMFLOAT4 Specular;  //  w分量为高光强度    XMFLOAT4 Reflect;} ;

这里不讨论Reflect成员变量,这个变量会在以后模拟镜子时用到。我们在镜面高光指数p放置在材质高光颜色的第4个分量中。这是因为光照不需要alpha分量,所以空出的这个位置可以储存一些有用的东西。漫反射材质的alpha分量在后面的章节中可用于alpha混合。

最后,我们提醒读者,三角形网格表面上的每个点都需要法线向量,以使网格表面上的每个点都可以(根据兰伯特余弦定理)计算入射光的角度。为了在三角形网格表面上估算每个点的法线向量,我们在顶点级别上指定法线。在光栅化阶段中,这些法线会在三角形表面上进行线性插值。

到目前为止,我们已经讨论了光线的组成原理,但是还没有讨论特定的光源类型。在下面的三节中,我们将讲解平行光(parallel light )、点光(point light)和聚光灯(spotlight)的实现方法。

你可能感兴趣的文章
跳转到另一个页面之后取消后退按钮
查看>>
flutter踩坑高德地图amap_base
查看>>
flutter极光推送
查看>>
jvm崩溃并输出 hs_err_pidxxxx.log文件异常原因
查看>>
HXAPIGate(中文名:浩心API网关)
查看>>
Nginx搭建TCP反向代理服务
查看>>
netty整合shiro,报There is no session with id [xxxxxx]问题定位及解决
查看>>
Ignite配置
查看>>
Ignite计算网格第一部分
查看>>
将表单序列化之后变成的json格式的数据无法通过Ajax发送到后台的解决
查看>>
使用JAVA代码实现字符串的简单拼接
查看>>
java中的模版方法
查看>>
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
查看>>
JSP页面以GET方式传参服务器报400
查看>>
自定义百度地图全局搜索结果的信息窗口
查看>>
SSM框架Jsp页面POST提交的中文数据保存到数据库变成乱码问题的分析
查看>>
j2ee编程实现将数据变成json格式的高效转换工具fastJson
查看>>
如何自己成功搭建一个SSM框架的WEB项目
查看>>
webservice知识一、SOAP风格的webservice——通过JDK的API发布一个webservice服务和创建一个webservice客户端用于访问该服务
查看>>
JavaEE开发之Spring中的多线程编程以及任务定时器详解(有源码)
查看>>