Нарисуйте карту мира [WGS84] с OpenGL в широком диапазоне - PullRequest
3 голосов
/ 02 февраля 2010

Я хочу нарисовать карту, состоящую из тайлов 256x256 пикселей (а лот из них).Они охватывают большую область.

Преобразование для преобразования lat | lon (от земного шара) в x | y (карта) порождает довольно большие значения.С этими большими значениями идет точность, и поэтому, если я ухожу далеко от точки 0/0, я получаю неточности в нескольких пикселях между текстурами двух плиток, находящихся рядом друг с другом (например, 2E8 | 0 и 2E8-1 | 0).

Как я могу исправить эти грязные нежелательные появления сетки?Текущая неудачная реализация - использовать float для рисования примитивов (это не должно иметь значения, так как все плитки вырезаны до кратных 256 в обоих направлениях координат).

Примечание: я уже пытался использовать glTranslate d для смещения, но либо двойная точность тоже недостаточна, либо это не причина глюков.

1 Ответ

4 голосов
/ 02 февраля 2010

На самом деле, я недавно столкнулся с такой же проблемой точно в моей реализации рендеринга целых планет из космоса на землю. Фактически, вам нужно создать новую структуру позиции, которая разделяет точность между различными поплавками. Например,

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

Затем вы кодируете все операторы и набираете функции приведения для этой структуры (+, -, *, /, toVec3), затем вы используете эту структуру местоположения для кодирования местоположения вашей камеры и каждой плитки сетки. Во время рендеринга вы не переводите камеру, а вместо этого переводите плитки по разнице. Например:

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, который имеет только двойную точность, и помещает работу в вашу программу, которая может по существу иметь бесконечную точность. Теперь точность и точность снижаются по мере удаления от камеры, а не от организации.

Счастливое кодирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...