在之前的文章中,我们实现了Shader的序列帧动画。
但是,我们会发现,我们的面片不会一直面向摄像机,当摄像机移动时,人物或特效就会出现穿帮的效果。所以,我们接下来就来实现让我们的面片面向摄像机。
类似的功能,还可能用于:特效、公告牌、八方旅人风格效果、饥荒风格效果。
float3 viewDir = normalize(mul(GetWorldToObjectMatrix(),_WorldSpaceCameraPos));
float3 upDir = float3(0,1,0);
X轴基向量 = Z轴基向量 × Y轴基向量
叉积 的顺序取决于 坐标系类型 (逆时针叉积)
模型本地空间坐标系为左手坐标系
左手坐标系中,X轴 = 食指 × 拇指 = Z × Y
float3 rightDir = cross(viewDir,upDir);
upDir = cross(rightDir,viewDir);
//Z轴基向量
float3 viewDir = normalize(mul(GetWorldToObjectMatrix(),_WorldSpaceCameraPos));
//假设Y轴基向量
float3 upDir = float3(0,1,0);
//X轴基向量(左手坐标系、逆时针叉乘)
float3 rightDir = cross(viewDir,upDir);
//Y轴基向量(左手坐标系、逆时针叉乘)
upDir = cross(rightDir,viewDir);