首页 新闻 会员 周边

关于向量旋转的推导问题

0
悬赏园豆:5 [待解决问题]

http://www.cnblogs.com/joeshifu/p/5489761.html

参考这篇,作者做旋转的时候没有使用旋转矩阵,而是用的两个点乘,不知道是如何推导的,有人知道嘛?

           float2 swirl(float2 uv)
            {
                //先减去贴图中心点的纹理坐标,这样是方便旋转计算 
                uv -= float2(0.5, 0.5);
 
                //计算当前坐标与中心点的距离。 
                float dist = length(uv);
 
                //计算出旋转的百分比 
                float percent = (_Radius - dist) / _Radius;
 
                if (percent < 1.0 && percent >= 0.0)
                {
                    //通过sin,cos来计算出旋转后的位置。 
                    float theta = percent * percent * _Angle * 8.0;
                    float s = sin(theta);
                    float c = cos(theta);
                    //uv = float2(dot(uv, float2(c, -s)), dot(uv, float2(s, c))); 
                    uv = float2(uv.x*c - uv.y*s, uv.x*s + uv.y*c);
                }
 
                //再加上贴图中心点的纹理坐标,这样才正确。 
                uv += float2(0.5, 0.5);
 
                return uv;
            }
//uv = float2(dot(uv, float2(c, -s)), dot(uv, float2(s, c))); 
uv = float2(uv.x*c - uv.y*s, uv.x*s + uv.y*c);
伊利丹·怒风的主页 伊利丹·怒风 | 初学一级 | 园豆:175
提问于:2017-08-21 14:03
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册