空间变换推导(一)中,推导了对一个三维坐标点的基本变换是做加法,应用在3D图形中引入了齐次坐标进行矩阵与点相乘,那么缩放变换则是对各个分量做乘法,我们先从基础说起
Px是P点的坐标值,Sx则是缩放的大小
同样我们使用矩阵的方式,也引入齐次坐标来计算,缩放矩阵与旋转矩阵虽然可以直接使用3x3矩阵进行计算,但这里为了统一计算,也跟平移变换一样引入w分量
在shader中实现
Varyings vert(Attributes v)
{
Varyings o = (Varyings)0;
// 平移矩阵
float4x4 T = float4x4
(
1,0,0,_Translate.x,
0,1,0,_Translate.y,
0,0,1,_Translate.z,
0,0,0,1
);
v.positionOS = mul (T,v.positionOS);
// 缩放变换
float4x4 M_scale = float4x4
(
_Scale.x,0,0,0,
0,_Scale.y,0,0,
0,0,_Scale.z,0,
0,0,0,1
);
v.positionOS = mul(M_scale,v.positionOS);
o.positionCS = TransformObjectToHClip(v.positionOS);
o.uv = TRANSFORM_TEX(v.uv,_MainTex);
return o;
}
顺便把参数暴露出来