Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два вопроса по OpenGL. 
:(
    Опции темы
OlegIT
Дата 21.12.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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)?
Может есть готовые алгоритмы решения этих задач?


PM MAIL   Вверх
baldina
Дата 21.12.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



PM MAIL   Вверх
OlegIT
Дата 21.12.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Спасибо. Буду разбираться.
PM MAIL   Вверх
OlegIT
Дата 25.12.2007, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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, при изменении координат курсора, вообще не меняютя. Что то я тут не понимаю.

PM MAIL   Вверх
baldina
Дата 25.12.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата

 но знак у objz обратный 

у тебя в gluLookAt вектор по Z=-1

кстати обрати внимание, что в OpenGL и Win направление экранного Y противоположное
PM MAIL   Вверх
OlegIT
Дата 25.12.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



-- в OpenGL и Win направление экранного Y противоположное – да, правильно, упустил я это. А как быть с перспективной проекцией?

И по поводу первого вопроса. Есть сцена с несколькими объектами. Как определить над каким объектом находится курсор, учитывая глубину? Надо glRenderMode (GL_SELECT)  применить? Как? Извиняюсь, но чего то торможуsmile

Это сообщение отредактировал(а) OlegIT - 25.12.2007, 17:16
PM MAIL   Вверх
baldina
Дата 25.12.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата

как быть с перспективной проекцией?


меня несколько смущает, что для ортогональной и перспективной проекций код выглядит немного по разному. 
принципиальных отличий между проекциями нет; разница только в матрице трансформации.
gluUnProject извлекает матрицы трансформации (MODELVIEW и PROJECTION) и производит обратную трансформацию. Т.е. это в принципе можно сделать вручную, чуда тут нет  smile

чему равны численные значения параметров glViewport, gluPerspective, gluLookAt?
похоже, что при изменении экранных координат координаты модели практически не меняются (из-за масштаба)
PM MAIL   Вверх
OlegIT
Дата 25.12.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Я понимаю, что чуда нет, но ручками делать не хочется, тем более есть соответствующие функции, только понять как их правильно применить. Путаюсь пока.
Может есть где примеры по моим двум вопросам?

PM MAIL   Вверх
baldina
Дата 26.12.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



PM MAIL   Вверх
Rickert
Дата 31.12.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Поиском пользуйтесь. Уже отвечал на этот вопрос лично 8)


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.