SkyBox

来源:互联网 发布:Linux cat退出 编辑:程序博客网 时间:2024/05/15 16:42

Sky

天空是位于极远处的,因此我们将天空盒的深度值设置在远截面

cbuffer Transform{float4x4 WorldViewProj;};struct VertexIn{float3 PosL :   POSITION;};struct VertexOut{float4 PosH :   SV_POSITION;float3 PosL :   POSITION;};VertexOut main(VertexIn input){VertexOut output;// 将z值设置为w// 归一化时深度值为w / w = 1// 使得sky永远位于远截面output.PosH = mul(float4(input.PosL , 1.0f) , WorldViewProj).xyww;// 用于采样环境贴图output.PosL = input.PosL;}//--------------------Pixel Shader--------------------TextureCube CubeMap;SamplerState SampleLinear;float4 main(VertexOut input) : SV_TARGET{    return CubeMap.Sample(SampleLinear , input.PosL);}

上面的代码用到了对TextureCube的采样,下面来说明下这个采样是如何完成的
这里写图片描述
如图中所示,点p处的颜色实则为OP与cube map相交的Texel的颜色。
以下代码完成这一功能:

TextureCube CubeMap;SamplerState gSamplerState;// v:向量OP// 若点O为空间原点,则点p的坐标即为向量v的值float4 color = CubeMap.Sample(gSamplerState , v);

cube map的结构:
这里写图片描述

Reflection

下图介绍了如何使用采样environment map
这里写图片描述
p是物体上一点,n是点p处的法线,v是视线的反射向量,Texel是反射向量与环境贴图的相交点,该点的颜色即为我们看到的物体表面的颜色。

0 0
原创粉丝点击