|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.07.2011, 11:33 | #1 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Система координат в графике
Вообще-то я пишу не игру, но для моего вопроса это лучший раздел. Я пишу диспетчерскую программу, строящую графики по данным с датчиков. На экране одновременно рисуются линии и подписи к ним.
При изменении размера окна графики должны растягиваться и плющиться, а текст должен только передвигаться. Значит, либо система координат мира (в смысле, матрица проекции) должна оставаться неизменной, тогда все объекты автоматически будут растягиваться с окном, а размер текста нужно программно менять. Либо СК мира менять вместе с окном и вручную плющить графики, а текст только двигать. Как обычно оказывается проще? Третий вариант, с несколькими viewport-ами пока не рассматриваем. Пишу всё в C#/XNA. Последний раз редактировалось ds.Dante; 28.07.2011 в 11:37. |
28.07.2011, 13:35 | #2 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
Я бы хранил графики в векторном виде и при ресайзе перерисовывал вместе с текстом.
Alar, верни репу!
|
28.07.2011, 16:37 | #3 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
ds.Dante, создай цифровой скелет карты. Это таблица по числу маршрутов, т.е. прямых, соединяющих точки (аэропорты). В одной записи должна быть начальная точка с координатами, конечная точка с координатами, точка вывода надписи. Масштабирование происходит с цифровым скелетом карты. Цикл проходит по записям и сдвигает координаты точек и надписей согласно масштабу. В конце процедуры идет отрисовка, так же в цикле перебираются уже обновленные записи и на карте рисуются линии и надписи по указанным параметрам.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
28.07.2011, 17:26 | #4 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Beermonza, ты меня не так понял. :) Программа нужна для управления бурением скважины. Она рисует графики давления, скорости, других величин, полученных с датчиков. А текст должен появляться в произвольном месте, скажем, в месте наведения курсора.
|
28.07.2011, 18:23 | #5 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
И в чем проблемы? ...есть контрольные точки на графике? ...наверное есть. Загоняем их в массив. После масштабирования (если опять правильно догадываюсь) контрольные точки изменят координаты. По наведению курсора цикл проверяет массив измененных контрольных точек и если есть совпадение с координатами мыши - выводит надписи, привязанные к конкретной точке, или строит график в этом месте (X,Y) на основе данных датчика, ...что еще можно предугадать. Покажи рисунок или схему как тебе нужно видеть и что вообще.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
29.07.2011, 02:56 | #6 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Цитата:
Подавляющее большинство шрифтов и не масштабируются, а занимают фиксированные размеры в пикселях. В XNA разве нет стандартных шрифтов ? http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx |
|
29.07.2011, 10:57 | #7 | ||
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Цитата:
Цитата:
Проблема в выборе варианта, с которым потом придётся меньше париться. Если так, то вообще прекрасно. Только, насколько я помню, в OpenGL весь текст так или иначе переводится в набор примитивов, а значит строится в мировой системе координат. Если в XNA нет функции вывода текста в пикселях (а не в коодинатах мира), то проще будет изменять мировую СК (то бишь проекцию, что по сути то же самое). |
||
29.07.2011, 15:59 | #8 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
ds.Dante, в любом случае у тебя должен быть оригинал графика в виде функции или набора функций, а так же метки, где нужны надписи (это координата X, если график в виде кривой линии). Далее есть понятие "масштаб" - которое показывает сколько у тебя расстояния в данный момент на единицу эталона. Эталон - шаг графика с выбранной детализацией. Меняя размер окна, по-горизонтали и/или по-вертикали ты изменяешь шаг пропорционально. График теперь пользуется не эталонным шагом, а измененным. Это не просто нарисовать график и сжимать/растягивать полученное изображение с потерей качества, а отрисовать график заново с новым шагом, т.е. с масштабом. При этом шрифт ты волен задавать какой-угодно и он будет выводиться строго в указанном месте.
Это вариант правильный, но может быть не простой в понимании. Всегда для построения изображений нужны опорные данные. Процедура отображения независимая, она "не понимает" масштабов, что сказано то и нарисует. А если растягивать не нужно? ...будешь писать еще одну процедуру, которая рисует без сжатия/растяжения изображения? ...вряд ли, ...это и есть проще, когда нет лишнего и за вывод изображения отвечает одна процедура, а все изменения лежать в цифровой модели, в данном случае графиков бурения.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
29.07.2011, 16:53 | #9 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Beermonza, ты обратил моё внимание на вещи, которые я должен был учесть -
выборка точек из буфера данных у меня уже есть, и изменение масштаба по времени мне всё равно делать вручную. Теперь появилась некоторая ясность. Плюсую. З. Ы. Нечаянно в рифму написал. :) Расставил enter-ы. :) |
30.07.2011, 03:32 | #10 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Цитата:
http://pmg.org.ru/nehe/nehe13.htm Вот пример текста для OpenGL, он использует функции wgl Windows, для построения шрифтов. ID3DXFont использует GDI для отображения шрифта. Ну это так сказать растровые шрифты. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Декартова система координат | 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 |