gpt4 book ai didi

c++ - 广泛使用OpenGL绘制世界地图[WGS84]

转载 作者:太空狗 更新时间:2023-10-29 21:08:54 25 4
gpt4 key购买 nike

我想绘制一个 map ,由 256x256 像素的图 block (很多)组成。它们覆盖了一个区域。

将 lat|lon(来自地球仪)转换为 x|y( map )的转换产生了相当大的值。有了这些大值,准确性就会提高,因此,如果我远离 0/0 点,我会得到两个相邻的 Tiles 纹理之间的多个像素不准确(例如 2E8 | 0 和 2E8-1 | 0)。

如何修复这些杂乱无章的网格外观?当前失败的实现是使用 float 来绘制基元(这应该无关紧要,因为所有 Tiles 在两个坐标方向上都被裁剪为 256 的倍数)。

注意:我已经尝试过使用 glTranslated 来进行偏移,但是要么 double 的精度也不够,要么这不是故障的原因。

最佳答案

实际上,我最近在实现从太空到地面渲染整个行星时遇到了完全同样的问题。事实上,您要做的是创建一个新的位置结构,在不同的 float 之间拆分精度。例如,

struct location
{
vec3 metre;
vec3 megametre;
vec3 terametre;
vec3 examtre;
vec3 yottametre;
};

然后为该结构(+、-、*、/、toVec3)编写所有运算符和类型转换函数,然后使用该位置结构对相机和每个网格图 block 的位置进行编码。在渲染时,您不平移相机,而是按差异平移图 block 。例如:

void render()
{
// ...
location diff = this->position - camera.position;
vec3 diffvec = diff.toVec3();
glPushMatrix();
glTranslatef(diffvec.x, diffvec.y, diffvec.z);

// render the tile
glPopMatrix();
}

它所做的是从 OpenGL 管道中移除差异计算,该管道只有 double ,并将工作放在您的程序上,该程序本质上可以具有无限精度。现在精度和准确度会随着您离相机越远而不是离原点越远而下降。

快乐编码。

关于c++ - 广泛使用OpenGL绘制世界地图[WGS84],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com