• 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)

  • 相关阅读:
    render()中添加js函数
    切图相关记录
    Jenkins 配置代理。
    Ant 打包 web 项目 xml 模板
    linux 删除命令
    git 创建 本地 裸 仓库
    swagger spring-boot 配置
    Idea 根据 表 生成 实体类
    java 流 api
    spring eureka 注册显示 ip:端口号
  • 原文地址:https://www.cnblogs.com/codingdiary/p/5459888.html
Copyright © 2020-2023  润新知