![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Coder |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
У меня есть программа, которая рисует псевдо 3D графику. Там используется экранная система координат x;y. Как перевести эти координаты в координаты OpenGL притом пропорционально разрешению экрана и удалению от сцены?
Все данные у меня есть: x,y и высота объектов. |
|||
|
||||
sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: нет Всего: 10 |
Тебе писать код алгоритма перевода координат самому нет необходимости, хотя это и можно.
Но проще установить перспективную проекцию: gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); где: fovy - угол обзора по направлению оси Y в градусах. aspect - характеристическое отношение угла обзора по направлению оси X к углу обзора по направлению оси Y. zNear, zFar - расстояние от наблюдателя до ближней и дальней плоскостей отсечения (занчения всегда положительны).
Можно также изменить значения магических чисел значений расстояния от наблюдателя до ближней и дальней плоскостей отсечения. Далее стандартными функциями OpenGL перемещаем и поворачиваем камеру и перерисовываем сцену. При этом автоматически будет меняться матрица проекции. -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
Coder |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
sgi1981, а как это будет на практике?
Например, я рисую объект в псевдо 3D графике на экране с разрешением 1024x768. Если я масштабирую картинку, объект соответственно удаляется/приближается. Т.е. при изменении масштаба (x; y; "z") объекта пересчитываются. На плоскости вроде все просто. А здесь мне не ясно, как OpenGL координаты (0.0..1.0) связать с моими старыми координатами, которые зависели от разрешения экрана. Смотрите прикрепленный файл. Присоединённый файл ( Кол-во скачиваний: 36 ) ![]() |
|||
|
||||
sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: нет Всего: 10 |
Объясню еще раз.
Если ты до этого рисовал в ортографической проекции, то теперь в ней не рисуй, а рисуй в перспективной проекции. Как настроить камеру для перспективного проецирования я уже писал в этой теме. Координаты задаешь те же, что и при рисовании в орто. Если были только две координаты, то третья координата может быть равна просто 0. Действительные координаты вершин на экране аппаратура получает в для этапа : 1. Умножение координат тобой задаваемых на матрицу наблюдения модели - результат - координаты вершин в глобальной системе координат. 2. Умножение координат полученных от первого этапа на матрицу проецирования - результат - координаты вершин экранные. Когда ты будешь изменять положение и ориентацию камеры в пространстве - будет меняться матрица проекции сцены. Матрицу наблюдения модели можешь загрузить единичную. Координаты экранные будут зависеть таким образом от матрицы проецирования, которая изменяется при поворотах и смещении камеры. Теперь понятно ? -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
Reptor |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1213 Регистрация: 29.12.2004 Репутация: нет Всего: 0 |
я тут увидел эту тему... что б не создавать новую то у меня таже проблема и я что то ничего не понимаю.. как это делать
У меня есть список вершин вот с такими координатами т1(530, 606, 0); т2(300, 606, 0); т3(300, 546, 0); т4(530, 546, 0); т5(600, 531, 0); т6(645, 576, 0); т7(600, 621, 0); вот и как мне вотету фигуру нарисовать в OpenGL.. ??? я использую
|
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |