Unity3D中二维纹理与球坐标映射 您所在的位置:网站首页 二维纹理映射怎么做出来的 Unity3D中二维纹理与球坐标映射

Unity3D中二维纹理与球坐标映射

2024-06-15 00:01| 来源: 网络整理| 查看: 265

Unity3D中二维纹理与球坐标映射 二维纹理坐标到球直角坐标映射球直角坐标到二维纹理坐标映射其他映射关系

二维纹理坐标到球直角坐标映射

在Unity3D中世界坐标系坐标轴如下: 在这里插入图片描述 其中z轴正方向正对着屏幕朝外。 二维纹理坐标原点在左下角: 在这里插入图片描述 映射到球关系如下: 在这里插入图片描述 其中6点代表X轴正方向,0123点代表Y轴正方向,5点代表Z轴正方向。 我们设二维纹理坐标(原点在左下角)为(x,mY),其转换到世界坐标系的球坐标为:

//图像宽为w,图像高为h,球半径为l x_pos = x / (float)w * (2 * M_PI) - M_PI; y_pos = mY /(float) h * (M_PI) - M_PI_2;//注意原点在左下角 Nx = (float)(Math.Cos(y_pos) * Math.Cos(x_pos) * l); Nz = -1.0f * (float)(Math.Cos(y_pos) * Math.Sin(x_pos) * l) ; Ny = (float)Math.Sin(y_pos) * l;

设纹理宽2048高2048,输入纹理坐标(512,1024)对应渲染效果如下: 在这里插入图片描述

球直角坐标到二维纹理坐标映射

与二维纹理坐标到球直角坐标映射相对应,我们需要将拿到的球坐标按照6点代表X轴正方向,0123点代表Y轴正方向,5点代表Z轴正方向的关系进行映射:

Point = new Vector3(1.0f, 0.0f, 1000.0f); r = (float)Math.Sqrt(Point.x * Point.x + Point.y * Point.y + Point.z * Point.z); double u = Math.Atan(-1.0f * Point.z / Point.x) / 2.000f / PI + 0.500f; double v = Math.Asin(Point.y / r) / PI + 0.500f; uv.x = (float)u; uv.y = (float)v;

输入视点坐标(1.0f, 0.0f, 1000.0f),经过映射后其对应的纹理坐标为(512,1024),渲染效果如下: 在这里插入图片描述

其他映射关系

如果将三维坐标系轴变为右手坐标系,即X轴正方代表6点,Y轴正方向代表7点,Z轴正方向代表0123点。 二维纹理坐标到球直角坐标映射变为:

//图像宽为w,图像高为h,球半径为l x_pos = x / (float)w * (2 * M_PI) - M_PI; y_pos = mY /(float) h * (M_PI) - M_PI_2;//注意原点在左下角 Nx = (float)(Math.Cos(y_pos) * Math.Cos(x_pos) * l); Ny = (float)(Math.Cos(y_pos) * Math.Sin(x_pos) * l) ; Nz = (float)Math.Sin(y_pos) * l;

球直角坐标到二维纹理坐标映射变为:

Point = new Vector3(1.0f, 0.0f, 1000.0f); r = (float)Math.Sqrt(Point.x * Point.x + Point.y * Point.y + Point.z * Point.z); double u = Math.Atan(Point.y / Point.x) / 2.000f / PI ; double v = Math.Asin(Point.z / r) / PI + 0.500f; uv.x = (float)u; uv.y = (float)v;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有