HLSL实现反射天空盒

 1 cbuffer cbPerObject
 2 {
 3     float4x4 WVP;
 4     float4x4 World;
 5     float3 cameraPos;
 6 };
 7 
 8 SamplerState ObjSamplerState;
 9 TextureCube SkyMap;
10 
11 struct REFLECT_VS_OUTPUT
12 {
13     float4 Pos : SV_POSITION;
14     float3 TexCoord : TEXCOORD;
15     float3 normal : NORMAL;
16 };
17 
18 REFLECT_VS_OUTPUT REFLECT_VS(float3 inPos : POSITION, float2 inTexCoord : TEXCOORD, float3 normal : NORMAL)
19 {
20     REFLECT_VS_OUTPUT output = (REFLECT_VS_OUTPUT)0;
21     output.Pos = mul(float4(inPos, 1.0f), WVP);
22     output.normal = mul(normal, World);
23     output.TexCoord = inPos;
24 
25     return output;
26 }
27 
28 float4 REFLECT_PS(REFLECT_VS_OUTPUT input) : SV_Target
29 {
30     input.normal = normalize(input.normal);
31     float3 I = normalize(input.Pos - cameraPos);
32     float3 R = reflect(I, normalize(input.normal));
33     return SkyMap.Sample(ObjSamplerState, R);
34 }

cube-mapping-skybox

效果:

我们基于观察方向向量I和物体的法线向量N计算出反射向量R。我们可以使用GLSL的内建函数reflect来计算这个反射向量。最后向量R作为一个方向向量对cubemap进行索引/采样,返回一个环境的颜色值。最后的效果看起来就像物体反射了天空盒。

反射(reflection)

转载于:https://www.cnblogs.com/codingdiary/p/5459888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值