SkyBox

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值