Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.09.2009, 14:22
euronymous euronymous вне форума
Прохожий
 
Регистрация: 11.09.2009
Сообщения: 3
Репутация: 10
По умолчанию Масштабирование карты в OpenGL

Добрый день!
Подскажите, пожалуйста, как лучше реализовать следующую задачу.
Необходимо на форму загружать карту местности из bmp файла и в дальнейшем ставить на ней определенные метки, привязанные к объектам (реальным координатам). А изюм вот в чем: в дальнейшем нужно масштабировать эту карту (приближать-удалять), но без масштабирования размеров самих меток. Т.е. метки должны оставаться привязанными к карте, но не должны увеличиваться-уменьшаться вместе с картой.
Может быть хотя бы подход подскажете.
Ответить с цитированием
  #2  
Старый 11.09.2009, 19:36
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Неудачная затея. Вы как ни изголяйтесь, но сделать масштабируемый битмап с точной привязкой к координатам - невозможно. Рано или поздно, но ваши метки которые ранее стояли на дороге уползут в болото.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.09.2009, 07:32
euronymous euronymous вне форума
Прохожий
 
Регистрация: 11.09.2009
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Неудачная затея. Вы как ни изголяйтесь, но сделать масштабируемый битмап с точной привязкой к координатам - невозможно. Рано или поздно, но ваши метки которые ранее стояли на дороге уползут в болото.

Если бы это было невозможно, я бы даже не стал пробовать. У меня есть приложение, в котором это все отлично реализовано с использованием DirectX (причем с точной привязкой координат и абсолютно без смещения). Но нужен OpenGL. Или это невозможно именно с OpenGL реализовать?
Ответить с цитированием
  #4  
Старый 14.09.2009, 09:36
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Какую библиотеку вы будете использовать для для работы с графикой зависит только от функционала оной. Хотите на OpenGL - пожалуйста.
Но я честно говоря сомневаюсь (несмотря на ваши уверения), что сдвига координат при работе с растром не происходит, хотя после просмотра GoogleEarth, где тоже битмап и метки можно наносить, моя уверенность в данном вопросе сильно пошатнулась.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 18.09.2009, 11:33
euronymous euronymous вне форума
Прохожий
 
Регистрация: 11.09.2009
Сообщения: 3
Репутация: 10
По умолчанию

В общем масштабирование и перемещение по карте я сделал следующим образом: рисую прямоугольник и накладываю на него текстуру в виде карты, а потом командой glTranslatef перемещаю его влево-вправо, а при перемещении по оси z - получается уменьшение-увеличение. Код прорисовки следующий:
Код:
glViewport(0, 0, ClientWidth, ClientHeight);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(7, ClientWidth / ClientHeight, cfltMapMinZoom, cfltMapMaxZoom);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glTranslatef(MapImage.X, MapImage.Y, -MapImage.Zoom);
  BeginPaint(Handle, ps);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glPushMatrix;
  glBegin (GL_QUADS);
    glTexCoord2d (0.0, 0.0);
    glVertex2f (-1.0, -1.0);
    glTexCoord2d (0.0, 1.0);
    glVertex2f (-1.0, 1.0);
    glTexCoord2d (1.0, 1.0);
    glVertex2f (1.0, 1.0);
    glTexCoord2d (1.0, 0.0);
    glVertex2f (1.0, -1.0);
  glEnd;
  glPopMatrix;
  SwapBuffers(DC);
  EndPaint(Handle, ps);
Теперь вопрос: каким образом можно на карте поставить метку (например треугольник), чтобы он не расползался вместе с картой, но положение было привязано к карте. Т.е. можно ли как-то вписать туда маленькое окно, координаты которого будут указаны в общих координатах, и рисовать в нем уже в координатах этого окошечка? Или может быть есть какие-то другие пути решения проблемы. В OpenGL я новичек, поэтому не знаю всех возможностей. Должен же быть какой-то стандартный подход.
Ответить с цитированием
  #6  
Старый 18.09.2009, 13:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Скорее всего вам придется пересчитывать каждый раз местоположение меток на карте исходя из абсолютных координат. Наверное так:
Имеется битмар 1000х1000. Устанавливаем метку в 50,50
Увеличиваем битмап на 30%:
Получаем: 1000+1000/100*30 = 1300
Вычисляем новые координаты метки:
Получаем: 50+50/100*30 = 65
Наверное так.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:02.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025