片元著色器:?
float3 _Center = float3(0, 0, 0);
float3 modelPos = i.modelPos;// float angle = atan2(modelPos.y - _Center.y, modelPos.x - _Center.x); // 計算角度,范圍-π到π
float angle = atan2(modelPos.y - _Center.y, modelPos.z - _Center.z); // 計算角度,范圍-π到π
angle = (angle + PI) / (2 * PI); // 將角度歸一化到0到1之間(如果需要)
if (angle > _AnimProcess)discard;
其中modelPos是模型坐標點,利用atan函數,計算出中心點與像素點的弧度,轉[0,1]范圍,再進行判定是否需要裁剪。
注意事項:若模型是基于YX軸平面的則需要改用
float angle = atan2(modelPos.y - _Center.y, modelPos.x - _Center.x); // 計算角度,范圍-π到π
ZX軸則是?float angle = atan2(modelPos.z - _Center.z, modelPos.x - _Center.x); 其他類似同理。
如果發現不對說明modelPos不正常,或者模型坐標系的中心點并沒有在(0,0,0)居中,需要調整模型坐標系對齊模型中心。