我们要研究的是3D空间中的球体坐标转换到球体全景图中的某一点的绝对平面坐标。
首先假设我们有一张球体全景图,对于图上的任何一点,我们可以将其拖到图像处理软件中,查看鼠标所指的位置,便得到其坐标,例如x=”200″,y=“100”。
球面坐标转换到全景图坐标参考教程:在MAKE PANO (FLAT) 平面全景中添加热点
当我们将其制作成3D空间时,该点实际上变成了球体坐标,也就是hlookat和vlookat。现在我们要做的就是一个逆向处理过程。从当前鼠标所指的位置,得到其在球体全景图的绝对坐标。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!-- 首先将鼠标在屏幕上的坐标转换为球面坐标 --> screentosphere(mouse.x, mouse.y, h, v); <!-- 获得分层的最大层数 --> sub(largestlevelindex, image.level.count, 1); <!-- 得到最高一层分层的立方面宽度--> copy(cubewidth, image.level[get(largestlevelindex)].tiledimagewidth); <!-- 计算球面全景图的宽度和高度 --> mul(spherewidth, cubewidth, Math.PI); mul(sphereheight, spherewidth, 0.5); <!-- 将坐标线性映射到球面全景图中 --> div(px, h, 360); add(px, 0.5); mul(px, spherewidth); roundval(px); div(py, v, 180); add(py, 0.5); mul(py, sphereheight); roundval(py); <!-- 输出结果 --> trace('pixelpos=',px,'/',py); |