| PMG http://forum.pmg.org.ru/ |
|
| Разрешение экрана и его влияние на изображение. http://forum.pmg.org.ru/viewtopic.php?f=1&t=40 |
Страница 1 из 2 |
| Автор: | Лёха [ 18 июл 2005 12:45 ] |
| Заголовок сообщения: | Разрешение экрана и его влияние на изображение. |
Раньше я делал меню вот так: рисовал кучу кнопок, накладывал на эти кнопки часть одной текстуры. Я немного подумал, и вот что надумалось: а не проще ли нарисовать один лишний прямоугольник чуть ближе к экрану и на него просто наложить ту самую текстуру с кнопочками. Ведь так быстрее программа работать будет(или всё же нет?) Но вот возникла одна проблема, хотя я ещё даже не начал делать это меню. Я создаю окно при помощи glut, сразу же разворачиваю на полный экран. Определяю разрешение экрана и отрисовываю всю сцену. При разрешениях 800х600 и 1024х768 я заметил некоторые различия .
Вот меня и интересует, если я наложу текстуру на дополнительный прямоугольник, будут ли кнопки точно под нужными частями текстуры?? Рисую я кнопки примерно так: х и у - размеры экрана. х/12 и у/8; х/12 и у/9; х/16 и у/9; х/16 и у/8; пусть всё это - четыре кординаты кнопки. Таким же способом я делю и текстуру. Я это спрашиваю, т.к. не очень хочу тратить время на эксперимент(Будет ли правильно работать моё меню). Поэтому, если кто знает, подскажите, пожалуйста. P.S. А про экспериментировать я смогу только через 2 недели ,так как с завтрашнего дня доступа к компьютеру не будет. Так что и ответа я могу подождать две недели. |
|
| Автор: | MagicWolf [ 18 июл 2005 16:10 ] |
| Заголовок сообщения: | |
Если текстурные координаты кнопок и координаты их относительно расположения прямоугольника совпадут, то да. Ведь ты делаешь ортографическую проекцию? |
|
| Автор: | Лёха [ 18 июл 2005 16:15 ] |
| Заголовок сообщения: | |
Да, именно ортографическую проекцию и делаю. Просто мне не давало покая расстояние между объектами сцены в различных разрешениях экрана. Ну теперь значит всё буду делать как и задумал. |
|
| Автор: | MagicWolf [ 18 июл 2005 16:37 ] |
| Заголовок сообщения: | |
Абсолютные координаты при разных разрешениях конечно не совпадут, но относительные будут одинаковы. Если натягивать текстуру на относительные размеры, то нет проблем. Если на абсолютные, то требуется пересчет. Т.е. если выставить размер ортографической проекции по ширине/высоте экрана, то будет одно, если всегда держать их например 800x600 - то это другое. |
|
| Автор: | Лёха [ 18 июл 2005 20:15 ] |
| Заголовок сообщения: | |
Значит, ещё одна проблема. Я выставлял размер ортографической проекции по ширине/высоте экрана(сначала делал окно на весь экран, а потом ф-циями GL-я получал высоту и ширину), но использовал только ширину, т.е. делал экран квадратным. Просто по другому(даже не помню сейчас точно, надо в программу лезть, а времени нету) были какие-то искажения. |
|
| Автор: | MagicWolf [ 19 июл 2005 11:24 ] |
| Заголовок сообщения: | |
Хм, мне все-таки кажется, что можно сделать так: 1. Все расположения кнопок хранить в виртуальных единицах, например, от 0 до 1000%. 2. При выводе на экран пересчитывать в реальные пикселы. Есть одна проблема, крайне сложная и не приятная. Если менять произвольно ширину/высоту экрана, то надо учитывать соотношение высоты/ширины, чтобы объекты сохранили свои пропорциональные размеры. Если ты экран делаешь область вывода квадратной, а она отображается на прямоугольник, например, сильно вытянутый вниз, то ничего хорошего вроде как получиться не должно. Как думаешь? |
|
| Автор: | rc.link [ 27 июл 2005 10:40 ] |
| Заголовок сообщения: | |
Ó ìåíÿ òîæå âîïðîñ ïî Ðàçðåøåíèþ. Ìíå íóæíî ñîçäàòü îêíî: CreateWindow(ÕÕÕ, ÕÕÕ, ÕÕÕ, x, y, ÕÕÕ, ÕÕÕ, ÕÕÕ, ÕÕÕ, ÕÕÕ, ÕÕÕ); Äåëî â òîì ÷òî ÿ õî÷ó ÷òîáû îêíî ïîÿâëÿëîñü ïîñåðåäèíå ýêðàíà. Ýòî ìîæíî çäåëàòü ïðîñòîé ïîäãîíêîé êîîðäèíàò x,y, íî ïðè èçìåíåíèè ðàçðåøåíèÿ ýêðàíà, îêíî ïîÿâèòñÿ íå íà ñåðåäèíå ýêðàíà. Ýòè ïàðàìåòðû íóæíî ïîäñ÷èòûâàòü îòíîñèòåëüíî ðàçðåøåíèÿ ýêðàíà Windows. Åñòü ëè ó ýòîé ôóíêèè ôëàãè êîòîðûå äàþò ýòî çíà÷åíèå èëè æå ìîæåò åñòü òàêàÿ ôóíêöèÿ, êîòîðàÿ âîçðàùàåò ðàçðåøåíèå ýêðàíà Windows? Âîáùåì êàê åãî ïîëó÷èòü? ÂîòÚ
|
|
| Автор: | rc.link [ 27 июл 2005 11:27 ] |
| Заголовок сообщения: | |
Âðîäè íàðûë ÷òî ìíå íàäî, åñëè êîìó ïîíàäîáèòñÿ òî: Êîîðäèíàòû îêíà (õ,ó): õ = (Äëèíà_ýêðàíà - Äëèíà_îêíà)/2 ó = (Øèðèíà_ýêðàíà - Øèðèíà_îêíà)/2 Äëèíà_ýêðàíà = GetSystemMetrics(SM_CXSCREEN); Øèðèíà_ýêðàíà = GetSystemMetrics(SM_CYSCREEN); |
|
| Автор: | MagicWolf [ 28 июл 2005 09:15 ] |
| Заголовок сообщения: | |
Корректно, если в CreateWindow передать x или/и y равны 0, то тогда посредине, я так обычно делают, что-то навроде default
|
|
| Автор: | rc.link [ 28 июл 2005 10:02 ] |
| Заголовок сообщения: | |
Íå ñîâñåì. Åñëè ïåðåäàòü 0,0 òî îêíî óäåò â ïåðâîé òî÷êå ýêðàíà, ñëåâà è ââåðõó. À default, ýòî çàâèñèò îò òèïà îêíà. |
|
| Автор: | MagicWolf [ 28 июл 2005 11:54 ] |
| Заголовок сообщения: | |
Тогда можно задавать w&h ... |
|
| Автор: | Лёха [ 10 авг 2005 01:09 ] |
| Заголовок сообщения: | |
Цитата: 1. Все расположения кнопок хранить в виртуальных единицах, например, от 0 до 1000%. 2. При выводе на экран пересчитывать в реальные пикселы. Я не понимаю этого. Может слегка подробнее? Цитата: Есть одна проблема, крайне сложная и не приятная. Если менять произвольно ширину/высоту экрана, то надо учитывать соотношение высоты/ширины, чтобы объекты сохранили свои пропорциональные размеры. Меняться ширина/высота будут только из 800*600 в 1024*768 и наоборот. Окно всегда в полноэкранном режиме. Цитата: Если ты экран делаешь область вывода квадратной, а она отображается на прямоугольник, например, сильно вытянутый вниз, то ничего хорошего вроде как получиться не должно.
Как думаешь? Я это понял. Я помню, что для чего-то делал экран квадратным, но не помню точно для чего(кажется что из-за искажения какого-то, а может как раз из-за меню.). А посмотреть в исходники больше не могу, так как их больше не существует. Я их со злости удалил
|
|
| Автор: | MagicWolf [ 10 авг 2005 08:34 ] |
| Заголовок сообщения: | |
Например, делаешь функцию put_text(x,y,text); x,y - задаешь от 0 до 100%, где 0 - левая граница экрана, а 100% правая. Затем в этой функции: x_put = x_virtual * wid_window_pixels / 100; Т.е. пересчитываешь виртуальные единицы в реальные. Пропорциональность вообще-то должна обеспечиваться OGL. Можно это себе еще представить как некую плоскость на которой ты рисуешь, а потом содержимое ее копируешь на экран, чтобы сохранить пропорциональность неизбежно придется квадрат копировать в квадрат, а не в прямоугольник. Т.е. если у тебе плоскость на которой ты рисуешь квадратная, то не стоит ее копировать в вытянутое прямоугольное окно полностью, можно скопировать только часть. |
|
| Автор: | В [ 29 сен 2005 14:27 ] |
| Заголовок сообщения: | |
Доброго времени суток! Я только только начал юзать GL (под BCB 6). Столкнулся с маленькой проблемой. Мне надо нарисовать длинную гнутую трубу. Сначала я строю модель, используя матрицу GL_MODELVIEW. Ну с этим я справляюсь . Дальше мне надо эту модель разместить в экране под заданы ракурсом (задается двумя углами).
Вот здесь то я и запнулся .
перехожу к матрице GL_PROJECTION и делаю необходимые повороты. Дальше, для того чтобы разместить изображение на экране надо пременить glOrtho. Но надо же знать получившиеся после поворота "границы" изображения - аргументы glOrtho! Вопрос: Можно ли найти эти границы (аргументы glOrtho) автоматически, средствами OpenGL? Сейчас эту задачу я решаю "врукопашную", т.е. написал специальную процедуру для решения этой задачки, что муторно, громозко и неуверен что оптимально. С уважением Владимир |
|
| Автор: | MagicWolf [ 29 сен 2005 15:20 ] |
| Заголовок сообщения: | |
Странно, обычно glOrtho задаются один раз, при создании окна или изменении его размеров. Дальше ты просто манипулируешь матрицей вида и модели, чтобы камера елозила по сцене и выбирала нужный ракурс. Причем, так как матрица одна и для камеры(вида) и для моделей, то как бы без разницы, что делать, или поворачивать как надо модель, или выставлять положение камеры. |
|
| Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|