![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| OlegIT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 684 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Первый вопрос. Есть сцена с несколькими объектами. Как определить над каким объектом находится курсор, учитывая глубину?
Второй. Такая же сцена, построенная с проекцией glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(a,b,c,d,e,f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0,40,0,0,0,0,0,-1,-1); Как спроецировать координаты курсора на одну из координатных плоскостей сцены, найти координаты точки (в моём случае плоскость X-Z)? Может есть готовые алгоритмы решения этих задач? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
||||
|
||||
| OlegIT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 684 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Спасибо. Буду разбираться.
|
|||
|
||||
| OlegIT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 684 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Странно они как-то работают. Например, при таких условиях:
glViewport(0,0,642,549); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-12.84,12.84,-10.98,10.98,-10000.,10000.); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0,40,0,0,0,0,0,-1,-1); из функции gluUnProject(325,276,0,…) получаю следующие данные (325,276 – координаты курсора) objx = 0.16; objy = 10040.00025; objz = -0.0599; Значения objx и objz правильные, но знак у objz обратный (меняю его и всё работает как надо) objy не понятно что за величина, я её не использую, но откуда такое значение? В случае переспективной проекции: glViewport(0,0,X,Y); glEnable(GL_DEPTH_TEST); glDisable(GL_DITHER); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(m_AngleLook,aspect,1.,1000.); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(m_LookX,m_LookY,m_LookZ,m_ScX,m_ScY,m_ScX,0.,1.,0.); значения objx, objy, objz, при изменении координат курсора, вообще не меняютя. Что то я тут не понимаю. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
у тебя в gluLookAt вектор по Z=-1 кстати обрати внимание, что в OpenGL и Win направление экранного Y противоположное |
|||
|
||||
| OlegIT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 684 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
-- в OpenGL и Win направление экранного Y противоположное – да, правильно, упустил я это. А как быть с перспективной проекцией?
И по поводу первого вопроса. Есть сцена с несколькими объектами. Как определить над каким объектом находится курсор, учитывая глубину? Надо glRenderMode (GL_SELECT) применить? Как? Извиняюсь, но чего то торможу Это сообщение отредактировал(а) OlegIT - 25.12.2007, 17:16 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
меня несколько смущает, что для ортогональной и перспективной проекций код выглядит немного по разному. принципиальных отличий между проекциями нет; разница только в матрице трансформации. gluUnProject извлекает матрицы трансформации (MODELVIEW и PROJECTION) и производит обратную трансформацию. Т.е. это в принципе можно сделать вручную, чуда тут нет чему равны численные значения параметров glViewport, gluPerspective, gluLookAt? похоже, что при изменении экранных координат координаты модели практически не меняются (из-за масштаба) |
|||
|
||||
| OlegIT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 684 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Я понимаю, что чуда нет, но ручками делать не хочется, тем более есть соответствующие функции, только понять как их правильно применить. Путаюсь пока.
Может есть где примеры по моим двум вопросам? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
||||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
Поиском пользуйтесь. Уже отвечал на этот вопрос лично 8)
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |