首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将地球的卫星照片转换为球面上的纹理图(OpenGL ES)

将地球的卫星照片转换为球面上的纹理图(OpenGL ES)
EN

Stack Overflow用户
提问于 2012-06-24 18:16:56
回答 1查看 1.5K关注 0票数 4

我们有5颗地球静止卫星,它们分布在赤道周围(间隔不相等,但几乎相同),每天都在拍摄地球的照片。每一张照片的输出是-惊喜!-一个球的照片,从很远的地方拍摄。

我需要重新组装这些照片到一个纹理映射的球体,我不知道如何最好地做到这一点。关键问题:

  1. --很明显--离中心越远,照片就会被严重扭曲,因为他们在看球体
  2. ,在一天中的不同时间拍摄了数百张“5组”照片。任何解决方案都需要编程--我不能只是手工完成:(
  3. 输出平台是iPad3: Open 2,纹理高达4096x4096,但功能不如桌面GPU。我对着色器不是很好(虽然我做了很多OpenGL OpenGL照片本身都是高分辨率的,我也不确定我能同时加载所有5个纹理。)我也有一个非常高分辨率的纹理加载到行星表面(在卫星照片之下)。

我已经得到了:映射到球体上的一个矩形纹理(我的球体是一个标准的网格,包裹在球体上,顶点均匀分布在表面上),所以.我试着把5张球的照片转换成一个矩形的地图(但到目前为止没有成功;尽管有人指点我做了一个“极地罪曲”,看起来效果可能更好)。

我还想用这5张照片制作一个立方体图,并聪明地决定哪一张照片应该读取一个给定的像素,但我并不完全相信。

有更好的办法吗?我忽略的东西?或者,有没有人有一个具体的方法来实现上述目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-08 11:04:47

我会用它做一个矩形纹理。

您将需要2 x 2D纹理/数组,一个用于r,g,b颜色和avg,另一个用于计数cnt。另外,我不相信我会使用OpenGL/GLSL,因为在我看来,C/C++在这方面会更好。

我会这样做:

  1. blank目标纹理(**avg[][]=0, cnt[][]=0**)
  2. obtain卫星位置/方向,时间

从位置和方向创建变换矩阵,以与照片上相同的方式投影地球。然后从时间上确定自转shift.

  • do环贯穿整个地球表面

两个嵌套循环-旋转和从equator.

  • get x,y,z a,b 的‘b-距离和变换矩阵+旋转移位(**a**-axis)

也可以向后执行a,b,z = f(x,y),但它更棘手,但速度更快,更准确。您还可以在相邻的(pixels/areas)[a][b]

  • add像素之间插入x,y,z

如果x,y,z在正面(z>0z<0取决于摄像机的Z方向),那么

cnta++;

  • end的嵌套循环从点#3.

  • goto #2到下一个photo

  • do循环通过整个 avg 纹理恢复平均颜色

if (cnta) avga/=cnta;

Notes

  1. can测试复制的像素是否为:

白天或晚上获得(只使用你想要的,而不是混合在一起!)也可以确定云(我认为灰/白颜色不是雪)和忽略them.

  • do不溢出颜色

可以使用3种不同的纹理that

  • can代替avg,以避免r[][],g[][],b[][]忽略地球边缘附近的区域,避免distortions

  • can应用光照校正

timea,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,好吧,我玩了一下,发现如下:

  • 反向投影校正对我的纹理根本不起作用,我认为这是可能的,这是经过后处理的图像.基于
  • 中间点距离的校正看起来不错,但是所使用的比例系数是奇数,不知道为什么要乘以6当它应该是4.

tx=0.5*(+(asin(x)*6.0/M_PI)+1);ty=0.5*(-(asin(y)*6.0/M_PI)+1);

  • 修正了非线性投影(由asin)

修正的非线性投影边缘变焦

  • distortions比没有asin纹理坐标的
  • 小得多。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11180015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档