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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2011, 11:33   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Система координат в графике

Вообще-то я пишу не игру, но для моего вопроса это лучший раздел. Я пишу диспетчерскую программу, строящую графики по данным с датчиков. На экране одновременно рисуются линии и подписи к ним.

При изменении размера окна графики должны растягиваться и плющиться, а текст должен только передвигаться. Значит, либо система координат мира (в смысле, матрица проекции) должна оставаться неизменной, тогда все объекты автоматически будут растягиваться с окном, а размер текста нужно программно менять. Либо СК мира менять вместе с окном и вручную плющить графики, а текст только двигать.

Как обычно оказывается проще? Третий вариант, с несколькими viewport-ами пока не рассматриваем.

Пишу всё в C#/XNA.

Последний раз редактировалось ds.Dante; 28.07.2011 в 11:37.
ds.Dante вне форума Ответить с цитированием
Старый 28.07.2011, 13:35   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Я бы хранил графики в векторном виде и при ресайзе перерисовывал вместе с текстом.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 28.07.2011, 16:37   #3
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

ds.Dante, создай цифровой скелет карты. Это таблица по числу маршрутов, т.е. прямых, соединяющих точки (аэропорты). В одной записи должна быть начальная точка с координатами, конечная точка с координатами, точка вывода надписи. Масштабирование происходит с цифровым скелетом карты. Цикл проходит по записям и сдвигает координаты точек и надписей согласно масштабу. В конце процедуры идет отрисовка, так же в цикле перебираются уже обновленные записи и на карте рисуются линии и надписи по указанным параметрам.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.07.2011, 17:26   #4
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Beermonza, ты меня не так понял. :) Программа нужна для управления бурением скважины. Она рисует графики давления, скорости, других величин, полученных с датчиков. А текст должен появляться в произвольном месте, скажем, в месте наведения курсора.
ds.Dante вне форума Ответить с цитированием
Старый 28.07.2011, 18:23   #5
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Beermonza, ты меня не так понял. Программа нужна для управления бурением скважины. Она рисует графики давления, скорости, других величин, полученных с датчиков. А текст должен появляться в произвольном месте, скажем, в месте наведения курсора.
Вынужден был только догадываться для какой цели. На основе слов "диспетчер", "датчик" и г. Саратов у тебя в данных решил, что это может быть аэропорт.

И в чем проблемы? ...есть контрольные точки на графике? ...наверное есть. Загоняем их в массив. После масштабирования (если опять правильно догадываюсь) контрольные точки изменят координаты. По наведению курсора цикл проверяет массив измененных контрольных точек и если есть совпадение с координатами мыши - выводит надписи, привязанные к конкретной точке, или строит график в этом месте (X,Y) на основе данных датчика, ...что еще можно предугадать.

Покажи рисунок или схему как тебе нужно видеть и что вообще.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.07.2011, 02:56   #6
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
При изменении размера окна графики должны растягиваться и плющиться, а текст должен только передвигаться. Значит, либо система координат мира (в смысле, матрица проекции) должна оставаться неизменной, тогда все объекты автоматически будут растягиваться с окном, а размер текста нужно программно менять. Либо СК мира менять вместе с окном и вручную плющить графики, а текст только двигать.
Пишу всё в C#/XNA.
Здесь просто изменение размера бэкбуфера, чтобы размер равнялся клиентской области окна, соответственно вся сцена масштабируется в этот буфер.
Подавляющее большинство шрифтов и не масштабируются, а занимают фиксированные размеры в пикселях.
В XNA разве нет стандартных шрифтов ?
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
An1ka вне форума Ответить с цитированием
Старый 29.07.2011, 10:57   #7
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
После масштабирования (если опять правильно догадываюсь) контрольные точки изменят координаты.
Цитата:
Сообщение от An1ka Посмотреть сообщение
Здесь просто изменение размера бэкбуфера, чтобы размер равнялся клиентской области окна, соответственно вся сцена масштабируется в этот буфер.
Короче, An1ka предлагает первый вариант, а Beermonza - второй.

Цитата:
Сообщение от Beermonza Посмотреть сообщение
И в чем проблемы?
Проблема в выборе варианта, с которым потом придётся меньше париться.

Цитата:
Сообщение от An1ka Посмотреть сообщение
Подавляющее большинство шрифтов и не масштабируются, а занимают фиксированные размеры в пикселях.
Если так, то вообще прекрасно. Только, насколько я помню, в OpenGL весь текст так или иначе переводится в набор примитивов, а значит строится в мировой системе координат. Если в XNA нет функции вывода текста в пикселях (а не в коодинатах мира), то проще будет изменять мировую СК (то бишь проекцию, что по сути то же самое).
ds.Dante вне форума Ответить с цитированием
Старый 29.07.2011, 15:59   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

ds.Dante, в любом случае у тебя должен быть оригинал графика в виде функции или набора функций, а так же метки, где нужны надписи (это координата X, если график в виде кривой линии). Далее есть понятие "масштаб" - которое показывает сколько у тебя расстояния в данный момент на единицу эталона. Эталон - шаг графика с выбранной детализацией. Меняя размер окна, по-горизонтали и/или по-вертикали ты изменяешь шаг пропорционально. График теперь пользуется не эталонным шагом, а измененным. Это не просто нарисовать график и сжимать/растягивать полученное изображение с потерей качества, а отрисовать график заново с новым шагом, т.е. с масштабом. При этом шрифт ты волен задавать какой-угодно и он будет выводиться строго в указанном месте.

Это вариант правильный, но может быть не простой в понимании. Всегда для построения изображений нужны опорные данные. Процедура отображения независимая, она "не понимает" масштабов, что сказано то и нарисует. А если растягивать не нужно? ...будешь писать еще одну процедуру, которая рисует без сжатия/растяжения изображения? ...вряд ли, ...это и есть проще, когда нет лишнего и за вывод изображения отвечает одна процедура, а все изменения лежать в цифровой модели, в данном случае графиков бурения.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.07.2011, 16:53   #9
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Beermonza, ты обратил моё внимание на вещи, которые я должен был учесть -
выборка точек из буфера данных у меня уже есть,
и изменение масштаба по времени мне всё равно делать вручную.
Теперь появилась некоторая ясность. Плюсую.

З. Ы. Нечаянно в рифму написал. :)
Расставил enter-ы. :)
ds.Dante вне форума Ответить с цитированием
Старый 30.07.2011, 03:32   #10
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Если так, то вообще прекрасно. Только, насколько я помню, в OpenGL весь текст так или иначе переводится в набор примитивов, а значит строится в мировой системе координат. Если в XNA нет функции вывода текста в пикселях (а не в коодинатах мира), то проще будет изменять мировую СК (то бишь проекцию, что по сути то же самое).
Не поняла при чем тут OpenGL, если XNA - это directX, только под си-шарп.
http://pmg.org.ru/nehe/nehe13.htm
Вот пример текста для OpenGL, он использует функции wgl Windows, для построения шрифтов.
ID3DXFont использует GDI для отображения шрифта. Ну это так сказать растровые шрифты.
An1ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Декартова система координат ofenod Паскаль, Turbo Pascal, PascalABC.NET 1 31.03.2011 07:08
Как создать линии исходящие из точки на графике на оси координат? Pavarotti Microsoft Office Excel 3 27.01.2011 09:06
Система координат в Qt lecume Qt и кроссплатформенное программирование С/С++ 1 20.01.2011 10:06
Система координат (JavaScript) IliaGT Помощь студентам 1 04.05.2010 17:03
Система координат SunKnight Общие вопросы Delphi 2 05.02.2008 19:42