Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2010, 12:05   #1
MDmitry
 
Регистрация: 05.12.2009
Сообщений: 9
По умолчанию hgt файлы и построение на их основе рельефа

Доброго времени суток.
Я строю трехмерную карту, т.е. с отображением рельефа местности.
Данные высот беру с SRTM3 из *.hgt файлов.

Данные распространяются квадратами размером 1х1 градус, при максимальном доступном разрешение 3 арксекунды такой квадрат является матрицей размером 1201х1201 элементов (пикселей). Один дополнительный ряд (нижний) и одна колонка (правая) являются дублирующим и повторяется на соседней матрице.

Данные являются простым 16 битным растром (без заголовка), значение пиксела является высотой над уровнем моря в данной точке, пиксела также может принимать значение -32768, что соответствует значению no data (нет данных). Референц-эллипсоид данных - WGS84.

Название квадрата соответствует координатам его левого нижнего угла.

Например:
n45e136 /45 гр. с.ш., 136 гр.в.д

Для примера я построил район г. Эльбрус

Считываю таким образом (код приведён на Blitz3D, но разобраться можно.
Код:
file_height=ReadFile("N43E042.hgt") ;Открываем файл
height=ReadByte(file_height)        ; Считываем первый байт
x=0
y=0
While Not Eof(file_height)          ; Пока не достигнут конец файла
height=ReadShort(file_height);      ; Читаем по два байта Возвращаемое значение – integer-число в диапазоне 0-65535 

If (x>299) And (y>399) And (x<300+100) And (y<400+360) Then  ;Ограничение на район г Эльбрус
hx=x-300
hy=y-400
nomer_vertex=hy*(razmer_x+1)+hx
x_vertex=VertexX(relief_surf,nomer_vertex)
z_vertex=VertexZ(relief_surf,nomer_vertex)
VertexCoords relief_surf,nomer_vertex,x_vertex,height,z_vertex   ; Изменяем высоту вершины
EndIf
При использовании OZI Explorer 3D получается нормальная карта Эльбруса, у меня же какая-та череда ущелий и возвышений, что неудивительно, данные считываются, например для
одного из x=const y=1400, 1720, 1211, 2042, 1600 и т.д.

Может кто работал с этими файлами, как правильно осуществить считывание высот из них?
MDmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор из таблицы по двум параметрам и построение таблице на основе выборки WildKosha Microsoft Office Excel 2 08.08.2009 01:53
ГСЧ на основе шума. RomanIgorevi4 Общие вопросы C/C++ 0 04.06.2009 22:16
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53