Unity3D中二维纹理与球坐标映射
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;
Unity3D中二维纹理与球坐标映射相关推荐
- 二维纹理 Texture 2D
二维纹理 Texture 2D 原文链接http://www.ceeger.com/Manual/Textures.html Textures bring your Meshes, Particles ...
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
转自:http://blog.163.com/tianhit@yeah/blog/static/165747821201052195212719/ #include<iostream> u ...
- 微信小程序长按图片,实现保存、转发、识别图中二维码
在小程序image组件中二维码/小程序码图片不支持长按识别,仅在 wx.previewImage 中支持长按识别 但是通过wx.previewImage只能实现保存,转发,小程序 只能识别 小程序二维 ...
- Java中二维数组的用法(不定长二维数组)
Java中二维数组的用法(不定长二维数组),即每个第二维的数组长度不一样. 1>代码如下: package com.demo.test;public class Test {public Tes ...
- 网页中二维码识别规则
识别规则 这里采用的逻辑是截屏识别,当客户端发现用户在网页的img标签内进行长按操作时,会立刻截屏并且启动二维码识别算法.所以这里用于二维码识别的图片是截屏,而不是之前有人提到的img标签中的图片. ...
- c语言动态的申请矩阵存储空间,C语言中二维数组如何申请动态分配内存
C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include #include int main() { int **a; int i ...
- php二维数组取交集,PHP中二维数组怎么取交集
PHP中二维数组取交集的方法:首先循环其中一个数组:然后使用in_array()函数判断被循环数组的每个元素是否在另外一个数组中:最后输出$out_arr即可. PHP二维数组怎么取交集? 思路,循环 ...
- 【Unity3D】图片纹理压缩方式,干货走起!
Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式. 在Texture2D的设置选项中,你可以针对不同的平台,设 ...
- Unity3D for Android 纹理压缩支持
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 Unity3D引擎技术交流QQ群:[119706192]本文链接地址: Unity3D for Android 纹理压缩支持 首先附图:U ...
最新文章
- 二流四流神经网路(模型融合矩阵乘法理论实践)
- SAP Cloud for Customer(C4C)前台显示的数据是如何从后台读取的
- http 使用curl发起https请求
- 怎样使用C# 获取WIFI的连接状态?
- 哪些网站在+1s后有神奇的功能
- C++primer第十一章 关联容器 11.1使用关联容器 11.2 关联容器概述
- 8 iSCSI网络存储服务
- 再记AE与AO的区别与联系
- 记录自定义view的基本使用
- Dialog的半透明背景的灰度
- 学生选课管理系统(Java)
- 计算机一级最强大脑,计算机入侵人类 《最强大脑》选手完败?
- 外事不决问元芳,内事不决找搜狗------简评搜狗语音助手
- 2022年贵州省职业院校技能大赛中职组网络安全赛项规程
- _id随机的 es_ES再现偷ID事件?仅与阿水ID相差1个字,玩家却释怀,原是系统作梗...
- 微博图床php上传,微博图床 - shitalpig的个人空间 - OSCHINA - 中文开源技术交流社区...
- 数据库的备份恢复和SQL语句
- Linux 网络唤醒
- 框架指针的省略(FPO)
- 青云QingCloud与陕中二院联手打造智慧医院范本