我们有5颗地球静止卫星,它们分布在赤道周围(间隔不相等,但几乎相同),每天都在拍摄地球的照片。每一张照片的输出是-惊喜!-一个球的照片,从很远的地方拍摄。
我需要重新组装这些照片到一个纹理映射的球体,我不知道如何最好地做到这一点。关键问题:
我已经得到了:映射到球体上的一个矩形纹理(我的球体是一个标准的网格,包裹在球体上,顶点均匀分布在表面上),所以.我试着把5张球的照片转换成一个矩形的地图(但到目前为止没有成功;尽管有人指点我做了一个“极地罪曲”,看起来效果可能更好)。
我还想用这5张照片制作一个立方体图,并聪明地决定哪一张照片应该读取一个给定的像素,但我并不完全相信。
有更好的办法吗?我忽略的东西?或者,有没有人有一个具体的方法来实现上述目标?
发布于 2014-01-08 11:04:47
我会用它做一个矩形纹理。
您将需要2 x 2D纹理/数组,一个用于r,g,b颜色和avg,另一个用于计数cnt。另外,我不相信我会使用OpenGL/GLSL,因为在我看来,C/C++在这方面会更好。
我会这样做:
avg[][]=0, cnt[][]=0**)从位置和方向创建变换矩阵,以与照片上相同的方式投影地球。然后从时间上确定自转shift.
两个嵌套循环-旋转和从equator.
x,y,z 到 a,b 的‘b-距离和变换矩阵+旋转移位(**a**-axis)也可以向后执行a,b,z = f(x,y),但它更棘手,但速度更快,更准确。您还可以在相邻的(pixels/areas)[a][b]
x,y,z。如果x,y,z在正面(z>0或z<0取决于摄像机的Z方向),那么
cnta++;
avg 纹理恢复平均颜色if (cnta) avga/=cnta;
Notes
白天或晚上获得(只使用你想要的,而不是混合在一起!)也可以确定云(我认为灰/白颜色不是雪)和忽略them.
可以使用3种不同的纹理that
avg,以避免r[][],g[][],b[][]忽略地球边缘附近的区域,避免distortions
从time和a,b坐标到规范化的time
希望能帮上忙..。
Edit1正交投影
这就是我所说的正交投影的意思:

这是使用的纹理(找不到更适合和免费的网站),并希望使用真正的卫星图像,而不是一些渲染.

这是我的正交投影应用程序
x,y,z轴)x,y,z轴)。
关键是将地球顶点坐标(vx,vy,vz)转换为卫星坐标(x,y,z),如果z >= 0是处理纹理的有效顶点,那么直接从x,y计算纹理坐标,不需要任何角度(正交)。
比如tx=0.5*(+x+1); ..。如果x被缩放成<-1,+1>并且可用的纹理是tx <0,1>,那么y轴也是一样的:ty=0.5*(-y+1); .如果y被缩放成<-1,+1>,可用的纹理是ty <0,1> (我的相机有与纹理矩阵相应的倒置y坐标系,因此y轴上的倒置符号)
如果z < 0,那么你正在处理超出纹理范围的顶点,所以忽略它.正如你在图像上看到的那样,纹理的外部边界是扭曲的,所以你应该只使用内部(例如地球图像面积的70% ),还可以根据纹理中点的距离进行某种纹理坐标校正。当你这样做的时候,就把所有的卫星图像投影合并到一个图像上,就这样了。
Edit2,好吧,我玩了一下,发现如下:
tx=0.5*(+(asin(x)*6.0/M_PI)+1);ty=0.5*(-(asin(y)*6.0/M_PI)+1);


修正的非线性投影边缘变焦
asin纹理坐标的https://stackoverflow.com/questions/11180015
复制相似问题