Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Перевод координат из экранных x;y в x;y;z OpenGL |
Автор: Coder 31.8.2007, 02:25 |
У меня есть программа, которая рисует псевдо 3D графику. Там используется экранная система координат x;y. Как перевести эти координаты в координаты OpenGL притом пропорционально разрешению экрана и удалению от сцены? Все данные у меня есть: x,y и высота объектов. |
Автор: sgi1981 31.8.2007, 20:12 | ||
Тебе писать код алгоритма перевода координат самому нет необходимости, хотя это и можно. Но проще установить перспективную проекцию: gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); где: fovy - угол обзора по направлению оси Y в градусах. aspect - характеристическое отношение угла обзора по направлению оси X к углу обзора по направлению оси Y. zNear, zFar - расстояние от наблюдателя до ближней и дальней плоскостей отсечения (занчения всегда положительны).
Можно также изменить значения магических чисел значений расстояния от наблюдателя до ближней и дальней плоскостей отсечения. Далее стандартными функциями OpenGL перемещаем и поворачиваем камеру и перерисовываем сцену. При этом автоматически будет меняться матрица проекции. |
Автор: Coder 3.9.2007, 09:52 |
sgi1981, а как это будет на практике? Например, я рисую объект в псевдо 3D графике на экране с разрешением 1024x768. Если я масштабирую картинку, объект соответственно удаляется/приближается. Т.е. при изменении масштаба (x; y; "z") объекта пересчитываются. На плоскости вроде все просто. А здесь мне не ясно, как OpenGL координаты (0.0..1.0) связать с моими старыми координатами, которые зависели от разрешения экрана. Смотрите прикрепленный файл. |
Автор: sgi1981 6.9.2007, 13:42 |
Объясню еще раз. Если ты до этого рисовал в ортографической проекции, то теперь в ней не рисуй, а рисуй в перспективной проекции. Как настроить камеру для перспективного проецирования я уже писал в этой теме. Координаты задаешь те же, что и при рисовании в орто. Если были только две координаты, то третья координата может быть равна просто 0. Действительные координаты вершин на экране аппаратура получает в для этапа : 1. Умножение координат тобой задаваемых на матрицу наблюдения модели - результат - координаты вершин в глобальной системе координат. 2. Умножение координат полученных от первого этапа на матрицу проецирования - результат - координаты вершин экранные. Когда ты будешь изменять положение и ориентацию камеры в пространстве - будет меняться матрица проекции сцены. Матрицу наблюдения модели можешь загрузить единичную. Координаты экранные будут зависеть таким образом от матрицы проецирования, которая изменяется при поворотах и смещении камеры. Теперь понятно ? |
Автор: Reptor 3.10.2008, 16:25 | ||
я тут увидел эту тему... что б не создавать новую то у меня таже проблема и я что то ничего не понимаю.. как это делать У меня есть список вершин вот с такими координатами т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.. ??? я использую
|