Unity3D中球直角坐标与球极坐标映射 |
您所在的位置:网站首页 › cad极坐标系和直角坐标系的转换 › Unity3D中球直角坐标与球极坐标映射 |
Unity3D中球直角坐标与球极坐标映射
极坐标与直角坐标映射Unity坐标系下映射二维纹理坐标转球直角坐标球直角坐标转球极坐标球极坐标转球直角坐标球直角坐标转二维纹理坐标
验证
极坐标与直角坐标映射
Unity坐标系如下: 我们将二维纹理坐标上的点转换到球极坐标,对球极坐标进行角度的操作,再映射会二维纹理坐标,对其进行验证: x_pos = viewPoint.x / (float)w * (2 * M_PI) - M_PI; y_pos = viewPoint.y / (float)h * (M_PI) - M_PI_2;//注意原点在左下角 Nx = (float)(Math.Cos(y_pos) * Math.Cos(x_pos))*l;//球半径l Nz = -1.0f * (float)(Math.Cos(y_pos) * Math.Sin(x_pos))*l; Ny = (float)Math.Sin(y_pos)*l; angel_theta = (float)Math.Acos(Ny/l);//半径为1,弧度值 angel_phi = (float)Math.Atan(Nz / Nx); angel_alpha = (float)Math.Asin(1.0f);//改变角度为90° //将图像向上旋转90° top_s.x = (float)(Math.Sin(angel_theta - angel_alpha) * Math.Cos(angel_phi))*l; top_s.z = (float)(Math.Sin(angel_theta - angel_alpha) * Math.Sin(angel_phi))*l; top_s.y = (float)Math.Cos(angel_theta - angel_alpha) * l; top.x = (float)(Math.Atan(-1.0f*top_s.z / top_s.x) / 2.000f / M_PI+0.500f);//纹理坐标,原点在左下角 top.y = (float)(Math.Asin(top_s.y/l) / M_PI + 0.500f); viewPoint.x = (Int32)(top.x * w); viewPoint.y = (Int32)(top.y * h);输入视点坐标(1000.0f, 0.0f, 0.0f),视点图像如下: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |