-
着色器代码-python实现pdf转换成word/txt纯文本文件下载
资源介绍
18.6 着色器代码
我们将法线贴图映射的一般处理过程总结如下:
1.使用某个绘图软件或工具软件创建法线贴图,并保存为图像文件。当程序初始化
时,从这些文件创建 2D 纹理。
2.为每个三角形计算切线向量 T。在网格中,顶点 v 的切线向量等于共享该顶点的每
个三角形的切线向量的平均值。(在我们的演示程序中,我们为简单几何体直接指定切线向
量,为那些从 3D 建模软件导出的复杂三角形网格计算平均值。)
3.在顶点着色器中将顶点的法线向量和切线向量变换到世界空间,然后将结果输出到
像素着色器。
4.使用插值后的切线向量和法线向量,为三角形表面上的每个像素点生成 TBN 基。
使用 TBN 基,将从法线贴图采样得到的法线向量从切线空间变换到世界空间。最后将法线
向量用于光照计算。
要实现法线法线贴图映射,我们需要在 lighthelper.fx 中添加以下函数:
//---------------------------------------------------------------
----------------------
// 将法线贴图的采样值转换到世界空间.
//---------------------------------------------------------------
----------------------
float3 NormalSampleToWorldSpace(float3 normalMapSample, float3
unitNormalW, float3 tangentW)
{
// 将每个分量从[0,1]解压到[-1,1].
float3 normalT = 2.0f*normalMapSample - 1.0f;
// 创建 TBN基.
float3 N = unitNormalW;
float3 T = normalize(tangentW - dot(tangentW, N)*N);
float3 B = cross(N, T);
float3x3 TBN = float3x3(T, B, N);
// 从切线空间转换到世界空间.
float3 bumpedNormalW = mul(normalT, TBN);
return bumpedNormalW;
}
这个函数在像素着色器中的使用方法如下:
float3 normalMapSample = gNormalMap.Sample(samLinear,
346 / 351
- 上一篇: unity timeline控件
- 下一篇: Go语言游戏服务器框架【Leaf Server】