Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
az20110303
0 / 0 / 0
Регистрация: 06.05.2011
Сообщений: 3
#1

проекция курсора в opengl

06.05.2011, 17:21. Просмотров 2028. Ответов 1
Метки нет (Все метки)

доброе время суток. есть приложеньице в opengl, мне необходимо вычислять координаты курсора мыши, спроецированные на плоскость z=0. дело в том, что камера может отдаляться/приближаться по оси z, разрешение может меняться.

не могу понять, как вычислить "шаг" одного пикселя. то есть, какое расстояние в координатах пространства opengl эквивалентно перемещнию на один пиксель.

на всякий случай, вот процедуры изменения размера окна и инициализации опенгл


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void resizeWindow( int width, int height )
{
    if ( height == 0 ) height = 1;
    glViewport( 0, 0, ( GLint )width, ( GLint )height );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity( );
    GLfloat ratio = ( GLfloat )width / ( GLfloat )height;
    gluPerspective( 45.0f, ratio, 0.1f, 100.0f );
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity( );
}
 
 
void initGL( )
{
    glEnable( GL_TEXTURE_2D );
    glShadeModel( GL_SMOOTH );
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    glClearDepth( 1.0f );
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
    glBlendFunc( GL_SRC_ALPHA, GL_ONE );
    glEnable( GL_BLEND );
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2011, 17:21
Ответы с готовыми решениями:

Перспективная проекция в OpenGL
Всем привет! Пишу я 3d тетрис на C++ с OpenGL: игрок смотрит как бы в...

OpenGl ортогональная проекция(камера)
Добрый день! Столкнулся с такой проблемой. У меня есть график(ссылка):...

Перспективная проекция
Как в OpenGL определить перспективную проекцию?) Желательно с примером и...

Перспективная проекция
Привет) такой вопрос - нарисовал цилиндр, но на экране отображается только...

Диметрия, аксонометрическая проекция
Здравствуйте! помогите решить задачу исходя из матрицы(на втором фото) ...

1
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
07.05.2011, 00:23 #2
Допустим, имеется некое пространство сцены, в которое объекты приводятся матрицей MODELVIEW. В дальнейшем объекты преобразовываются в экранное пространство матрицей Projection. Даны координаты курсора в окне с шириной/высотой w/h пикселей: (x, y), которые отсчитываются от верхнего левого угла. Найти координаты соответствующей точки в пространстве сцены.
Решение.
Переведём координаты курсора в экранное пространство. Оно ограничено координатами от -1 до 1 по всем 3 осям, с точкой (0, 0, 0) в центре экрана, ось x идёт слева направо, ось y снизу вверх. Отсюда формулы: xS = (2*x - w)/w, yS = (h - 2*y)/h, zS = 0.
Следующий шаг - перевод из экранных координат в пространство сцены. Для этого надо либо вычислить матрицу проекции (её размерность - 4*4) по данным в MSDN формулам, либо просто прочитать её с помощью glGetDoublev. Затем найти обратную матрицу методом Гаусса. Дополнить координаты xS, yS, zS компонентой w, чтобы получить однородные координаты (задать w = 1). Умножить полученный вектор длиной 4 на обратную матрицу, получим новый вектор длиной 4: (xM, yM, zM, wM). Поделим координаты xM, yM, zM на компонент wM и получим координаты мышиного курсора в пространстве сцены.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2011, 00:23

Проекция не правильно установилась?
Привет, всем! Я установил glfrustum вот так: glMatrixMode(GL_PROJECTION);...

Проекция. луч выбора
Прошу помочь. Пытаюсь сделать аналог "луча выбора" (ray picking ) хочу сделать...

Создаю игру с научным уколоном на C++/opengl. Как подключить openGL и добиться кроссплатформенности
Я читал про opengl - для его инициализации нужно создавать windows - окно. Для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru